我的要求是为现有项目创建delta脚本,因此我们将进行大量更改并在其中创建更多表。我们有开发,进入,qa,舞台和生产环境。我想仅在开发环境中进行更改,Dacpac必须使用VSTS自行处理其余环境。除种子数据外,所有脚本都必须重新运行。我能够添加一个表,但无法在构建模式下在数据库项目中添加alter table语句。我不想导入完整的数据库。为什么它不接受alter statement。因为我必须检查是否存在后期部署脚本,所以我不想在那里使用alter语句。如何实现这一点。
答案 0 :(得分:2)
我想你可能已经错过了解SQL Server数据库项目是什么/做了什么。它自己使用SQL脚本来构建数据库外观的内存模型。然后,此模型将编译为DACPAC,其中包含描述数据库应该的外观的元数据。部署DACPAC时,会生成一个更改脚本,该脚本将数据库转换为与DACPAC中描述的模型匹配的状态。
ALTER TABLE
无效的原因是由于没有要更改的表。该项目不是数据库,它不知道如何在内存中表示您的ALTER
语句。如果将其包含在部署前或部署后脚本中,则模型将忽略此操作。正如您所发现的那样,它会将部署混乱到其他环境中。
将数据库部署到dev
环境的理想方法是使用VSTS通过CI / CD实践与DACPAC。我不确定为什么你不想使用DACPAC来部署到dev
环境,但如果这是一个硬快速规则,那么你可以在Visual Studio的SSDT中使用模式比较来在本地复制你的更改到目标数据库。