質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

3回答

15344閲覧

SQLServerにおける複数特殊文字を含んだデータベース名について

spearhead

総合スコア15

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

1クリップ

投稿2016/05/12 15:09

編集2016/05/12 15:11

通常[]や、()といった文字列がデータベース名やテーブル名、カラム名などにある場合、[]で括ることでエスケープできます。

例えば
Alter database
を行うにあたり、

(データベース)
がデータベース名であれば、
Alter database [(データベース)] set ...
といった形で、エラーを回避できますが、
(データベース)[その1]
といった名前がついていた場合、
[(データベース)[その1]]
としたとしても、二つ目の[の時点で誤った解釈をしてしまいます。
[(データベース)][[]その1[]]
といった形も試してみたのですが、やはり通りません。

本来はそんな妙な名付けをするなという話なのですが、既存システムが自動的に付けてしまうため、データベース名を変更する事ができません。

どなたか適切なエスケープ方法をご存知の方はいらっしゃらないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

本件につきまして、別途ご教示いただき、解決いたしましたので投稿いたします。

_AAAAA_BBBBB(CC)[DDDD**]**]
が正解でした。

クオートを意図して[を指定した後、SQLのエンジン側は次の]を探すことになる為、一つ目の]をエスケープすることで、正しく解釈されるということのようですね。

もしくは、SET QUOTED_IDENTIFIERをONにして、
ダブルクォーテーションにてクオートするという手も使えました。

ご助言、ご閲覧頂いた方々に感謝申し上げます。

投稿2016/05/15 11:56

spearhead

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://technet.microsoft.com/ja-jp/library/ms176027(v=sql.105).aspx ですかね。

[ => [[
] => ]]

でエスケープしてみればいけるんじゃないでしょうか。

(データベース)[その1] => [(データベース)[[その1]]]

でいかがでしょう。

投稿2016/05/12 15:41

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spearhead

2016/05/12 18:37

ご回答ありがとうございます。 少し答えに近づいた気がします。 大変申し訳ないのですが、提示した事例が少し情報が足りていませんでした。 実際はもう少し複雑です。 例えば下記のようなデータベースがあるのですが、 _AAAAA_BBBBB(CC)[DDDD](EE) このような場合に、 ALTER DATABASE [_AAAAA_BBBBB(CC)[[DDDD](EE)] とした場合、 '(' 付近に不適切な構文があります。 といった状況になってしまうのです。 さらに、 [_AAAAA_BBBBB(CC)[[DDDD][(EE)] とした場合は、 '(EE)' 付近に不適切な構文があります。 となります。 後者は_AAAAA_BBBBB(CC)[DDDD]までは正しくとらえられているものの、 最後の(EE)は別個の文字列としてとらえられているものと推察されますが、 これを一綴りでテーブル名として、解釈させる方法が未だ発見できません。 お知恵を拝借できれば幸いでございます。
kaz.Suenaga

2016/05/12 23:11

まずは掲示したリンク先をよく読みましょう。 上記で示した対応例以外にも、いくつも例が書かれています。 推察はやめて、学習しましょう。
guest

0

本件につきまして、別途ご教示いただき、解決いたしましたので投稿いたします。

_AAAAA_BBBBB(CC)[DDDD]]
が正解でした。

クオートを意図して[を指定した後、SQLのエンジン側は次の]を探すことになる為、一つ目の]をエスケープすることで、正しく解釈されるということのようですね。

もしくは、SET QUOTED_IDENTIFIERをONにして、
ダブルクォーテーションにてクオートするという手も使えました。

ご助言、ご閲覧頂いた方々に感謝申し上げます。

投稿2016/05/18 09:12

spearhead

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問