适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
部署前脚本和部署后脚本是部署期间要执行的项目中包含的 SQL 脚本。 预先/后期部署脚本包含在 .dacpac 中,但它们不会编译到数据库对象模型中或使用数据库对象模型进行验证。 预先部署脚本在执行部署计划之前执行,但在脚本执行之前会计算部署计划。 后期部署脚本在部署计划完成后执行。
SQL 项目文件示例和语法
SQL 项目文件可以指定单个预先部署脚本和单个后期部署脚本。
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
应从数据库模型生成中排除这些文件,方法是在 Visual Studio 中的文件属性中将 Build Action 属性设置为 Remove,或者将文件的条目添加到 .sqlproj 文件中,并将 Build 属性设置为 Remove。 生成 SQL 项目时,额外的文件会由项目 SDK 合并到它们引用的预部署脚本或部署后脚本.dacpacMicrosoft.Build.Sql中。
...
<ItemGroup>
<Build Remove="scripts\script1.sql" />
<Build Remove="scripts\script2.sql" />
</ItemGroup>
</Project>
在 SDK 样式的 SQL 项目中,添加条目 Build Remove="path\file.sql" 会完全从项目中删除该文件,从而导致它不再显示在 Visual Studio Code 项目视图中。 若要在将文件从模型编译中排除时保持可见,请再次将其添加为项 None :
...
<ItemGroup>
<Build Remove="scripts\script1.sql" />
<None Include="scripts\script1.sql" />
<Build Remove="scripts\script2.sql" />
<None Include="scripts\script2.sql" />
</ItemGroup>
</Project>
这样可以防止文件作为数据库模型的一部分进行编译,同时使其在项目中可见。
Tip
在项目构建后,您可以通过将.dacpac文件扩展名更改为.zip,并将.zip解压到一个文件夹中,验证预部署和后部署脚本。 单个 .sql 文件用于预部署和部署后脚本,应包含原始 SQL 项目中所有引用文件的整个 Transact-SQL 内容。
添加部署前和部署后脚本
在“解决方案资源管理器”中右键单击该项目,然后选择“添加”>“脚本”。 选择“预先部署脚本”或“后期部署脚本”。
脚本文件将添加到项目中并在查询编辑器中打开,你可在其中完成脚本。 每次部署项目时,都会在执行部署计划之前或之后执行此脚本。
在 解决方案资源管理器中,右键单击项目节点并选择“ 添加新>项”。 此时会显示“ 添加新项 ”对话框,选择“ 显示所有模板>表”,然后选择 “预部署脚本 ”或 “部署后脚本”。
脚本文件将添加到项目中并在查询编辑器中打开,你可在其中完成脚本。 每次部署项目时,都会在执行部署计划之前或之后执行此脚本。
在 Visual Studio 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 。