使用 SSDT 发布数据库更改,包括将列添加到目标数据库中的现有表(之前通过 SSDT 创建)。而不是创建新的 SSDT 数据库。尝试通过表创建脚本或通过更改表脚本添加列。我遇到了同样的错误。即使通过Schema Compare尝试过,目标数据库中的表仍然遇到同样的错误。如何通过 SSDT 发布更改对目标数据库对象的更改?
RAISERROR(检测到 N'行。模式更新正在终止,因为可能会发生数据丢失。',16、127) WITH NOWAIT;
我尝试通过检查
如果可能发生数据丢失,请阻止增量部署。
不要 ALTER 复制的对象。
不要更改更改数据捕获对象。
发生这种情况是因为您在
CREATE TABLE
脚本中间添加了列。这会导致发生“表重建”。几个月前我在博客上讨论过这个问题:SSDT 问题:表重建列序数部分是您遇到的具体问题。假设你有一张这样的桌子:
然后在列列表中间添加一列:
这将“重建”整个表,以使基础表元数据在模型(您的 SSDT 项目)和目标数据库之间保持同步。
解决方案?只需将列添加到末尾:
这不会重建表,因此不会导致潜在的数据丢失。