2016-09-15 4 views
0

いくつかの変数を使用する必要があるSQLスクリプトを再利用できるようにしています。パス内のSQLCMD変数

私はstart.sqlスクリプトでsqlcmdの

sqlcmd -S <SERVER> -v PROJECT="<PROJECTNAME>" -i .\start.sql 

でSQLスクリプトを実行バットスクリプトを持って、私はこのような別のSQLスクリプトを実行します。

:r .\<PROJECTNAME>\init.sql 

だから私はハードコードされています変数の値は完全に機能します。変数自体を使用したいのですが、それを動作させることはできません。

:r .\$(PROJECT)\init.sql 

最後の行は、私がうまくいくと思ったものです。私はこれを行うことによって、変数PROJECTの値をテストしました:

PRINT '$(PROJECT)' 

それは私に変数の値を与えます。

誰でも私のフォルダ内のスクリプトを実行する変数を使用して私を助けることができます。

ありがとうございます。

EDIT: PRINT $(PROJECT)は、次のエラーメッセージを表示しました。このコンテキストでは名前「XXX」は使用できません。有効な式は、定数、定数式、および(一部のコンテキストでは)変数です。列名は使用できません。

XXX =変数の値。

+0

'PRINT $(PROJECT)'(一重引用符なし)を使用するとどうなりますか? – artm

+0

あなたはそれがうまくいかなかったことをどのように知っていますか?エラーメッセージが表示されましたか?それとも起こらないことが起こったのでしょうか?もしそうなら - 何? – BeanFrog

+0

いいえ、それは、もし私が使っているとすれば:r。\ $(PROJECT)\ init.sqlそれはメッセージなしでスキップするだけです。しかし、$(PROJECT)を変数値に切り替えると、別のスクリプトが実行されます。 –

答えて

1

これまでの私と同じような構文を得ることができたことがわかったので、私は少し実験を行いました。それは動作します - 代わりに、私は変数にパスの全体を置く場合

A fatal scripting error occurred. Cannot find directory in the path specified for ":r" command.

:私は、私はあなたが行っていたものを複製した場合、私は次のエラーを得たことがわかりました。だから、これにあなたの.sqlファイルを変更してみてください:

:r $(PROJECT_FILE_NAME) 

と、このようSQLCMDからそれを呼び出す:

sqlcmd -S <SERVER> -v PROJECT_FILE_NAME=".\<PROJECTNAME>\init.sql" -i .\start.sql 

私はこのアプローチを取った場合、それはエラーなしでファイルinit.sqlを走りました。

+1

私もこれを試しましたが、変数の完全なパスを渡すとうまく動作しますが、この場合は実行したくありません。 sqlcmdで変数を連結する方法について、別の解決策が見つかりました。 **:r "。\" $(PROJECT) "\ register.sql" **これはこのフォーラムの投稿https://social.msdn.microsoftでの顕著な回答でした。com/Forums/sqlserver/en-US/ce6b6277-340a-4900-814d-5714f74b411f/sqlcmd-variable-concatenation-behavior-why-it-so?forum = sqltools –