小编Dan*_*ann的帖子

使用 SSDT 发布数据库更改,包括更改列的数据类型

我有一个在构建过程中自动发布的 SQL Server Data Tools (VS2012) 项目。一列最近从 更新intdecimal(18,4)。由于此更改,发布失败并显示错误

(49,1): SQL72014: .Net SqlClient Data Provider: Msg 50000, Level 16, State 127, Line 6 检测到行。架构更新正在终止,因为可能会发生数据丢失。(44,0): SQL72045: 脚本执行错误。执行的脚本: /* The type for column QuantityReceived in table [dbo].[Reconciliation_Receiving] 当前为 INT NOT NULL 但正在更改为 DECIMAL (18, 4) NOT NULL。可能会发生数据丢失。*/

IF EXISTS (select top 1 1 from [dbo].[Reconciliation_Receiving]) RAISERROR(检测到 N'Rows。由于可能发生数据丢失,模式更新正在终止。', 16, 127) WITH NOWAIT 批处理时发生错误被处决。

我明白为什么我会收到该错误,并且我知道可以通过禁用“如果可能发生数据丢失则阻止增量部署”标志来解决它。但是,非常强烈反对禁用该功能,因此它不会是一个可接受的解决方案。

我能想到的唯一其他解决方案是执行以下操作:

  1. 创建一个临时表并将现有表的内容复制到临时表中
  2. 截断现有表
  3. 让SSDT更新数据类型
  4. 从临时表填回数据

不过,这似乎非常笨拙且效率低下。

有更好的选择吗?

sql-server ssdt

10
推荐指数
1
解决办法
3万
查看次数

标签 统计

sql-server ×1

ssdt ×1