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

Posted

技术标签:

【中文标题】SQL Server 数据库项目中的更改表脚本【英文标题】:Alter table script in SQL Server database project 【发布时间】:2018-05-19 06:40:58 【问题描述】:

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

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

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

由于我必须检查if exists 以获取部署后脚本,因此我不想在那里使用alter 语句。我怎样才能做到这一点?

【问题讨论】:

嘿 baskar,就像在另一个问题中一样,您不需要 ssdt 来完成您的工作。不要使用 ssdt - 只需编写脚本并运行它们(如果需要,可以使用工具) 【参考方案1】:

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

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

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

【讨论】:

我只想使用 DACPAC 来部署所有环境。我们只能在 SSDT 中创建 DACPAC 对,我们还有其他方法可以创建 DACPAC 文件吗? @BaskarManoharan 您可以使用 SqlPackage 创建 DACPAC 文件。 SSDT 只是 Visual Studio 中的一个工具,它允许我们创建 DACPAC 作为构建的一部分。如果您在构建服务器上安装了 SSDT(VS 2017 默认提供),那么您可以使用 MSBuild 创建 DACPAC 并将其部署到您的 CI/CD 管道中。 您也可以从 SSMS 创建 dacpacs。但是,如果您引用其他数据库,它将失败,SqlPackage 在这种情况下会有所帮助

以上是关于SQL Server 数据库项目中的更改表脚本的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL SERVER 的脚本整理

解析 SQL Server 数据库的脚本

寻找为整个 SQL Server 数据库创建导出脚本的工具 [关闭]

如何更改 SQL Server 中的前缀表?

生成只包含某些对象的 sql server 脚本?

Visual Studio SQL Server 2016 数据库项目和临时表