SQLCMD.exe を実行し、スクリプト変数にコマンド ライン引数を指定すると、コマンド ラインで指定された値が SQL スクリプト ファイルで定義された値を上書きすることを期待します。
例えば
次の SQL スクリプトがあるとします。
:setvar XXX "SQL script"
print '$(XXX)'
そしてコマンドライン:
sqlcmd.exe -S <Server> -d <Database> -E -b -i <Script> -v XXX="Batch script"
出力は次のようになると思います。
バッチスクリプト
ただし、出力は次のとおりです。
SQL スクリプト
これは意図的なものですか、それとも:setvar
SQL スクリプト内のステートメントを削除する必要がありますか?
スクリプトでステートメントを提供した:setvar
ので、SQL Management Studio で SQLCMD モードを使用してスクリプトを編集/テストできますが、テスト環境と運用環境ではコマンドラインからスクリプトを実行できます。