SQL Server执行INSERT INTO时遇Msg4819错误:批量加载违反唯一性约束
解决SQL Server INSERT INTO触发Msg 4819错误的问题
问题背景
- 操作场景:执行
INSERT INTO语句将迁移表客户数据写入生产表时,触发错误:Msg 4819:无法批量加载,批量数据流排序指定错误或违反目标表唯一性约束 - 表结构与业务规则:
- 源表、目标表均存储客户数据
- 目标表以「客户编号+版本号」组合作为逻辑主键,对应一个非聚集唯一索引
- 接口需区分两类客户:活跃客户编号大于90000000,每次接口运行会重写该类数据;非活跃客户使用系统分配的空闲编号,写入后不再修改
- 测试环境表现:从生产库复制的测试库未区分客户状态,接口运行无异常
排查尝试
- 拆分数据分批插入,错误依然存在
- 禁用目标表相关索引,问题未得到解决
解决方案
排查发现目标表新增了uniqueidentifier类型的唯一索引,原INSERT INTO语句对该列插入NULL值违反了唯一约束。将该列的插入值改为NEWID()后,问题彻底解决。
内容的提问来源于stack exchange,提问作者Tobi Stalder
相关产品推荐
相关产品推荐

