我在这里有点头疼。我试图对空表运行合并语句,但它抱怨标识列无法更新。这是我试过的代码:
DBCC CHECKIDENT('ui_screens', RESEED, 1)
SET IDENTITY_INSERT ui_screens ON;
GO
MERGE INTO ui_screens AS Target
USING (VALUES(....))
AS SOURCE (screen_id, ....)
ON Target.screen_id = Source.screen_id
WHEN MATCHED THEN
UPDATE SET
screen_id = Source.screen_id,
....
WHEN NOT MATCHED BY TARGET THEN
INSERT (
screen_id,
....)
VALUES (
screen_id,
....)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
SET IDENTITY_INSERT ui_screens OFF
screen_id
是包含身份的列,目前正在给您带来麻烦。我已经在这个剧本中重新开始了,我已经设置了#34; SET IDENTITY_INSERT ui_screens ON
"在我的桌子上。我错过了什么?这个错误是否与没有记录的表有关?
答案 0 :(得分:0)
只需删除您正在更新screen_id = Source.screen_id
的行。无论如何更新它都没有意义,因为为了使WHEN MATCHED
返回true,首先必须使用相同的值。
您不需要删除整个UPDATE语句。您可以保留其余部分以更新其他列。