我有一个在构建过程中自动发布的 SQL Server Data Tools (VS2012) 项目。列最近从 更新int
到decimal(18,4)
。由于此更改,发布失败并出现错误
(49,1):SQL72014:.Net SqlClient 数据提供程序:检测到消息 50000、级别 16、状态 127、第 6 行。架构更新正在终止,因为可能会发生数据丢失。(44,0):SQL72045:脚本执行错误。执行的脚本: /* 表 [dbo].[Reconciliation_Receiving] 中列 QuantityReceived 的类型当前为 INT NOT NULL,但正在更改为 DECIMAL (18, 4) NOT NULL。可能会发生数据丢失。*/
IF EXISTS (select top 1 1 from [dbo].[Reconciliation_Receiving]) RAISERROR (N'Rows were detected. 由于可能发生数据丢失,架构更新正在终止。', 16, 127) WITH NOWAIT 批处理时发生错误被执行。
我了解我收到该错误的原因,并且我知道可以通过禁用“如果可能发生数据丢失,阻止增量部署”标志来解决它。但是,对于禁用该功能有非常强烈的反对意见,因此这不是一个可以接受的解决方案。
我能想到的唯一其他解决方案是执行以下操作:
- 制作一个临时表并将现有表的内容复制到临时表中
- 截断现有表
- 让 SSDT 更新数据类型
- 从临时表填回数据
不过,这似乎非常笨拙且效率低下。
有更好的选择吗?