.sqlファイルにSQLスクリプトがあります。このように定義されたパラメータがいくつかあります
DECLARE @device_directory NVARCHAR(250) = '$(CONFIG_DBPATH)'+'$(CONFIG_DBNAME)'
次に、このスクリプトを.batスクリプトで実行します。
SET CONFIG_DBNAME=NewConfigBase
SET CONFIG_DBPATH=C:\BT_Server\
sqlcmd -I -S .\SQLEXPRESS8 -i SetUpConfigDb.sql
構成ツールの一部としてこの機能を実装するタスク、つまり物理dbファイルを作成してデータベースに添付するタスクが割り当てられました。後で、データベーステーブル、ストアドプロシージャなどの作成も含めます。これらは、現在、別の.sqlスクリプトで定義されています。
理想的には、構成ツールがsqlcmdに依存せず、スクリプトをインプロセスで実行するようにします(たとえば、SqlCommandを使用して)。これにより、sqlcmdの出力を解析するのではなく、標準のエラー処理(例外)を使用できるようになります。
今、私はこれに取り組む方法が少しわかりません。同じタスクを実行する2つの異なるSQLクエリを維持せずに、.batスクリプトを引き続き使用できるように、既存のSQLスクリプトを再利用できるようにしたいと考えています。
スクリプトの1つには、いくつかの場所にGOが含まれています。SqlCommandではこれが許可されていないことを理解しています。また、SqlParameterを使用して$(CONFIG_DBPATH)などの値を設定できるかどうかもわかりません(実際、できないことはほぼ確実です)。
だから私の質問は、このシナリオに取り組むための推奨される方法は何ですか?GOを使用して.sqlコマンドを実行するにはどうすればよいですか。また、.batファイルとマネージコードの両方からスクリプトを使用できるように変数を指定するにはどうすればよいですか。1つのオプションは、スクリプトがコードから実行されるときにスクリプトを「ウォッシュ」し、GOなどを削除し、変数の処理方法を変更することだと思います。しかし、もっと良いオプションはありますか?