4

まず、私は DBA ではなく、SQL Server の (管理者としての) 経験もありません。そのため、回答する際は音節の少ない単語を使用してください...

SQL Server 2008 R2 を実行しており、パーティション分割されていない双方向のトランザクション レプリケーションを設定する概念実証スクリプトを作成しようとしています。MS サイトのスクリプトを微調整して動作させることができたので、必要に応じてカスタマイズしようとしています。これには、一連の値を変数に引き出すことが含まれます。

SSMS を「SQLCMD モード」に設定しましたが、1 つの例外を除いて、すべての変数が問題なく解析されます。

:setvar ReplicationDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata';

これは私にエラーを与えます:

致命的なスクリプト エラーが発生しました。:setvar の解析中に不正な構文が検出されました

問題を変数値にスペースが存在することに絞り込みました。私が読んでいることによると、これは問題なく動作するはずです。一重引用符を二重引用符 (通常の種類と斜めの種類の両方) に置き換えようとしましたが、すべて同じエラーが発生します。

スペース文字をエスケープする方法を教えてくれるウェブ上の情報が見つかりません。私が見たすべての記事では、文字列が引用符で囲まれている場合、SSMS は空白に関係なく、それらのペアの間にあるものを単一の文字列として解釈するだけであると述べています。

誰にもアイデアはありますか?

変数の値を次のように変更できると思います。

:setvar ReplicationDirectory 'C:\Progra~1\Micros~1\MSSQL10_50.SQL2\MSSQL\repldata';

しかし、「スペースを使用できない理由」を解決したいと思います。代わりに問題。

どうもありがとう。

トム

4

2 に答える 2

11

一重引用符ではなく二重引用符を使用します。

:setvar ReplicationDirectory "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata"

select '$(ReplicationDirectory)' as test

また

:setvar ReplicationDirectory "'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata'"

select $(ReplicationDirectory) as test

@SQLCMD モード変数は実際にはコマンド ライン変数であり、T-SQL 変数 (記号で始まる) ではなく、それに応じて設定する必要があります。

于 2010-12-17T15:50:41.253 に答える
3

一重引用符で囲まれた文字列内のスペースに加えて、末尾のセミコロンが問題を引き起こしています。

:setvar test1 'test test';スペースとセミコロンのエラー

:setvar test1 'test test'スペースのエラー

:setvar test3 "test test";セミコロンのエラー

:setvar test4 "test test"スペースを変数で使用できるようにしますtest test

:setvar test4 "'test test'"変数で単一引用符とスペースを次のように使用できるようにします。'test test'

于 2016-03-02T21:55:18.683 に答える