Informatica SQL Server目标表加载故障求助:IDENTITY_INSERT相关报错
解决SQL Server标识列插入错误(Msg 544)
这个问题我之前处理过不少次,咱们先拆解问题本质,再一步步解决:
错误原因
错误Server: Msg 544, Level 16, State 1, Line 1 Cannot insert explicit value for identity column in table 'table' when IDENTITY_INSERT is set to OFF的核心是:
你的目标表有标识列(IDENTITY),这类列默认由SQL Server自动生成递增值,当你尝试手动向该列插入显式值,但未开启表的IDENTITY_INSERT权限时,就会触发这个报错。
解决方案
按照以下步骤操作即可解决:
先开启目标表的
IDENTITY_INSERT开关:SET IDENTITY_INSERT [你的表名] ON;注意:SQL Server规定同一时刻只能对一个表开启
IDENTITY_INSERT,如果当前会话已经给其他表开了,需要先关闭再切换。执行插入语句时,必须明确指定所有列的列表(包括标识列),不能用
SELECT *或者省略列名,比如:INSERT INTO [你的表名] (标识列名, 列2, 列3) VALUES (1001, '值2', '值3');这样SQL Server才知道你要手动插入标识列的具体值。
插入完成后,记得关闭
IDENTITY_INSERT(这是最佳实践,避免后续操作出现意外):SET IDENTITY_INSERT [你的表名] OFF;
为什么同工作流的另一个会话没问题?
大概率是以下几种情况之一:
- 另一个会话的插入操作没有给标识列传值,完全依赖SQL Server自动生成递增值,自然不会触发这个限制;
- 另一个会话之前已经开启了目标表的
IDENTITY_INSERT(可能之前的操作没及时关闭,但不建议长期开启); - 两个表的标识列配置有差异:比如另一个表的标识列没有设置为
IDENTITY,或者该表的IDENTITY_INSERT默认处于开启状态(非常少见)。
内容的提问来源于stack exchange,提问作者Vignesh Kiswanth
相关产品推荐
相关产品推荐

