2010-12-17 12 views
3

まず、私はDBAではないため、SQL Serverの経験はありません。SQL Server Management Studioでsetvarを使用してスペース文字をエスケープする

私はSQL Server 2008 R2を実行しており、非分割、双方向、トランザクションレプリケーションを設定するProof Of Conceptスクリプトを作成しようとしています。私はMSのサイトから作業スクリプトを微調整することができました。今私はそれをニーズに合わせてカスタマイズしようとしています。これは、値の束を変数に引き出すことを含む。

私はSSMSを "SQLCMDモード"に設定していますが、すべての変数は大文字と小文字を区別して解析します。

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

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

A fatal scripting error occurred. Incorrect syntax was encountered while parsing :setvar

私は、変数の値にスペースが存在するために私の問題を絞られています。私が読んできたことによると、これは問題なく動作するはずです。私は単一引用符をダブルス(通常のバラエティと斜めの種類の両方)で置き換えようとしましたが、すべて同じエラーが出ます。

どのように私はスペース文字をエスケープする必要があります私に教えてWeb上に何かを見つけることができません。私が見てきたすべての記事では、文字列が引用符で囲まれていると、SSMSは空白に関係なく、それらのペアの間にある文字列を単一の文字列として解釈すると言います。

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

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

しかし、私はむしろ、解決したい:

私は私がする変数の値を変更することができると思います「なぜ私はスペースを使用できないのですか?」代わりに問題。

多くのありがとうございます。

トム

答えて

10

シングル、ダブル、使用しない、引用:

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

select '$(ReplicationDirectory)' as test 

OR

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

select $(ReplicationDirectory) as test 

をSQLCMDモード変数で始まる行変数ではなく、T-SQL変数を(実際にコマンドされています@シンボル)、それに応じて設定する必要があります。

+0

私は数時間前に別の答えにコメントを投稿しましたが、消えてしまったようです。二重引用符を使用すると、(スペースを削除しても)同じエラーになります。一重引用符と二重引用符を使用すると、同じエラーが発生します。あなたが持っていることを示唆している記事を見たことがあります。サンプルを自分のコードにコピーアンドペーストしても、このエラーが発生します。 – Tom

+0

@Tom - これらの例はどちらも、SQL 2008の開発者と標準、SP1とSP2、64bitで動作します。 setvarの割り当てだけで、他のコマンドは使用しないでスクリプトにエラーが出ますか? –

+0

ありがとうございます。パスのスペースが私を吹き飛ばしていました。 – MikeMalter

0

末尾のセミコロンが、単一引用符付き文字列内のスペースに加えて問題を引き起こしています。スペースとセミコロン空間上

:setvar test1 'test test'エラーの

:setvar test1 'test test';エラーがセミコロン

:setvar test4 "test test"

:setvar test3 "test test";エラーがtest test

:setvar test4 "'test test'"なるように可変に使用可能なスペースを作ります変数に使用できる単一引用符と空白はです

関連する問題