ポストデプロイメントスクリプトでクエリを使用して初期化するテーブルに追加の列を追加しました。残念ながら私は毎回実行できるクエリを書くようには思えないので、カラムが利用可能である場合にはデプロイ前のスクリプトをチェックインし、引数または変数をデプロイ後のスクリプトに渡す方法を探しています。一度初期化クエリを実行します。SQL Serverデータベースプロジェクトのデプロイメント前およびデプロイメントスクリプト
試み1:私は前の展開スクリプトでsqlcmd
VARを設定しようとしたが、次の構文が許可されていません。
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL
:setvar PerformInitQuery 1
試み2:私はまた、通常のを使用して試してみました配置前スクリプト内の変数:
DECLARE @PerformInitQuery BIT = 0
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL
SET @PerformInitQuery = 1
そして、配置後スクリプトでそれをアクセス:
IF @PerformInitQuery = 1
BEGIN
:r ".\DeploymentScripts\PerformInitQuery.sql"
END
この最後の試みは、Visual Studioからプロジェクトを公開するときには動作していましたが、ビルドサーバーでは動作しませんでした。 SqlPackage.exe
を使用して、生成された.dacpac
ファイルをデータベースに公開します。
エラーSQL72014:.NET SqlClientデータプロバイダー:
メッセージ137、レベル15、状態2、行12
はスカラ変数を宣言しなければなりません "@PerformInitQuery"
通常の変数は、単一のバッチ内にしか存在しないため、機能しません。展開では、複数のバッチが使用されます。作成スクリプトをチェックするだけで、複数のGO文が表示されます。プレ・デプロイメントで行ったのと同じチェックをデプロイメント後に追加するのはなぜですか? – JodyT
デプロイ後のスクリプトが実行される前にビルドによって列が作成されるため、この実行または実行が作成されたかどうかを判断する方法がありません – Zenuka