【发布时间】:2023-03-09 22:50:02
【问题描述】:
我已经在一个表中添加了一个额外的列,我想在部署后脚本中使用查询对其进行初始化。不幸的是,我似乎无法编写每次都可以运行的查询,因此我正在寻找一种方法来检查部署前脚本(如果该列可用)并将参数或变量传递给部署后脚本然后将运行一次初始化查询。
尝试 1: 我尝试在预部署脚本中设置 sqlcmd 变量,但不允许使用以下语法:
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语句。为什么不将您在部署前所做的检查添加到部署后? -
因为构建会在部署后脚本运行之前创建列,所以我无法确定它是在本次运行还是之前运行
标签: sql sql-server visual-studio sql-server-data-tools database-project