質問: 通常[]や、()といった文字列がデータベース名やテーブル名、カラム名などにある場合、[]で括ることでエスケープできます。 例えば Alter database を行うにあたり、 (データベース) がデータベース名であれば、 Alter database [(データベース)] set ... といった形で、エラーを回避できますが、 (データベース)[その1] といった名前がついていた場合、 [(データベース)[その1]] としたとしても、二つ目の[の時点で誤った解釈をしてしまいます。 [(データベース)][[]その1[]] といった形も試してみたのですが、やはり通りません。 本来はそんな妙な名付けをするなという話なのですが、既存システムが自動的に付けてしまうため、データベース名を変更する事ができません。 どなたか適切なエスケープ方法をご存知の方はいらっしゃらないでしょうか?
回答: 本件につきまして、別途ご教示いただき、解決いたしましたので投稿いたします。 _AAAAA_BBBBB(CC)[DDDD**]**] が正解でした。 クオートを意図して[を指定した後、SQLのエンジン側は次の]を探すことになる為、一つ目の]をエスケープすることで、正しく解釈されるということのようですね。 もしくは、SET QUOTED_IDENTIFIERをONにして、 ダブルクォーテーションにてクオートするという手も使えました。 ご助言、ご閲覧頂いた方々に感謝申し上げます。