You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中MERGE操作Identity列报8102错误的解决方法咨询

问题根因

报错的核心原因是 IDENTITY_INSERT 配置仅支持在INSERT操作时手动指定自增标识列的值,不支持通过UPDATE修改标识列的值。你当前脚本中WHEN MATCHED分支的更新逻辑本身是冗余的:MERGE的匹配条件就是t.[Id] = s.[Id],尝试将t.Id设置为s.Id不会修改任何数据,完全没有必要保留。

修复后脚本

直接删除冗余的匹配更新分支即可,修改后的完整脚本如下:

PRINT 'Update rows in [Survey].[Portfolio]'
GO
SET IDENTITY_INSERT [Survey].[Portfolio] ON
MERGE [Survey].[Portfolio] AS t USING (
    VALUES
        (1),
        (2)
) AS s([Id]) ON (t.[Id] = s.[Id])
WHEN NOT MATCHED BY TARGET THEN
INSERT
    ([Id])
VALUES
    (s.[Id])
-- 删除原有的冗余更新逻辑
WHEN NOT MATCHED BY SOURCE THEN DELETE;

GO
PRINT '' 
PRINT 'Operation applied [Survey].[Portfolio]' 
PRINT ''
GO
-- 建议用完及时关闭标识插入开关,避免后续操作异常
SET IDENTITY_INSERT [Survey].[Portfolio] OFF
GO

补充说明

如果确实有需要修改已存在行的自增Id值的场景,无法通过UPDATE直接实现,只能先删除对应旧行,再插入带有目标Id值的新行。

内容的提问来源于stack exchange,提问作者Eugene Sukh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:36:04