配置前と配置後スクリプトの概要
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
配置前および配置後スクリプトは、配置中に実行されるプロジェクトに含まれる SQL スクリプトです。 配置前/配置後スクリプトは .dacpac
に含まれていますが、データベース オブジェクト モデルにコンパイルまたは検証されません。 配置前スクリプトは配置プランが実行される前に実行されますが、配置プランはスクリプトの実行前に計算されます。 配置後スクリプトは配置プランの完了後に実行されます。
SQL プロジェクト ファイルのサンプルと構文
SQL プロジェクト ファイルには、1 つの配置前スクリプトと 1 つの配置後スクリプトを指定できます。
SQL プロジェクト ファイルの次の例では、配置前スクリプトとして prep-db.sql
ファイルを追加します。
...
<ItemGroup>
<PreDeploy Include="prep-db.sql" />
</ItemGroup>
SQL プロジェクト ファイルの次の例では、配置後スクリプトとして populate-app-settings.sql
ファイルを追加します。
...
<ItemGroup>
<PostDeploy Include="populate-app-settings.sql" />
</ItemGroup>
</Project>
各ファイルを順番に呼び出す SQLCMD スクリプトを使用し、配置前または配置後スクリプトの一部として複数のファイルを実行できます。
:r .\scripts\script1.sql
:r .\scripts\script2.sql
これらのファイルは Build Action
プロパティを Visual Studio のファイル プロパティで None
に設定するか、Build
属性が None
に設定された .sqlproj
ファイル内のファイルにエントリを追加することにより、データベース モデル ビルドから除外する必要があります。
...
<ItemGroup>
<Build Remove="scripts\script1.sql" />
<Build Remove="scripts\script2.sql" />
</ItemGroup>
</Project>
配置前と配置後スクリプトの追加
ソリューション エクスプローラーでプロジェクトを右クリックし、[追加]>[スクリプト] を選択します。 [配置前スクリプト] または [配置後スクリプト] を選択します。
スクリプト ファイルがプロジェクトに追加されてクエリ エディターで開かれ、スクリプトを完了できます。 プロジェクトが配置されるたびに、このスクリプトは配置プランが実行される前または後に実行されます。
ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]、[新しいアイテム] の順に選択します。 [新しい項目の追加] ダイアログが表示されるので、[すべてのテンプレートの表示] を選択します。 次に、[テーブル] を選択します。 [配置前スクリプト] または [配置後スクリプト] を選択します。
スクリプト ファイルがプロジェクトに追加されてクエリ エディターで開かれ、スクリプトを完了できます。 プロジェクトが配置されるたびに、このスクリプトは配置プランが実行される前または後に実行されます。
VS Code または Azure Data Studio の データベース プロジェクト ビューでプロジェクトを右クリックし、[配置前スクリプトの追加] または [配置後スクリプトの追加] を選択します。 ファイル拡張子を付けずにスクリプト名を指定します。
スクリプト ファイルがプロジェクトに追加されてクエリ エディターで開かれ、スクリプトを完了できます。 プロジェクトが配置されるたびに、このスクリプトは配置プランが実行される前または後に実行されます。
.sqlproj
ファイルを直接編集し、配置前または配置後スクリプトを追加します。 <PreDeploy>
ファイルの <PostDeploy>
セクションに <ItemGroup>
または .sqlproj
を追加します。
たとえば、配置前スクリプトとしてスクリプト scripts\before-script.sql
をプロジェクトに追加するには、次の操作を行います。
...
<ItemGroup>
<PreDeploy Include="scripts\before-script.sql" />
</ItemGroup>
プロジェクトが配置されるたびに、このスクリプト scripts\before-script.sql
は配置プランが実行される前に実行されます。