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 数据库项目中的更改表脚本的主要内容,如果未能解决你的问题,请参考以下文章