更改 SQL Server 数据库项目中的表脚本

2 sql dacpac sql-server-data-tools azure-sql-database

我的要求是为现有项目创建增量脚本,因此我们将进行大量更改并在其中创建更多表。

我们有开发、质量检查、阶段和生产环境。我只想在开发环境中进行更改,其余环境必须由 Dacpac 使用 VSTS 自动处理。除种子数据外,所有脚本都必须可重新运行。

我可以添加表,但无法alter table在构建模式下的数据库项目中添加语句。我不想导入完整的数据库。Dacpac 不能接受更改声明吗?

由于我必须检查if exists部署后脚本,因此我不想alter在那里使用 use 语句。我怎样才能实现这个目标?

tj-*_*tti 6

我认为您可能不了解 SQL Server 数据库项目是什么/做什么。该项目本身使用 SQL 脚本来构建数据库的内存模型。然后,该模型编译为 DACPAC,其中包含描述数据库应是什么样子的元数据。当您部署 DACPAC 时,这会生成一个更改脚本,该脚本会将数据库转换为与 DACPAC 中描述的模型相匹配的状态。

您不起作用的原因ALTER TABLE是没有可更改的表。该项目不是数据库,它不知道如何在内存中表示您的ALTER语句。如果将其包含在部署前或部署后脚本中,模型将忽略它。正如您所发现的,它会扰乱其他环境的部署。

将数据库部署到dev环境的理想方法是通过 CI/CD 实践与 DACPAC 结合使用 VSTS。我不确定为什么您不想使用 DACPAC 部署到您的dev环境,但如果这是一个严格的快速规则,那么您可以使用 Visual Studio 的 SSDT 中的架构比较将更改本地复制到目标数据库。