即使重新设置或者identity_insert设置为ON,也无法更新表的标识列

时间:2014-11-10 13:46:38

标签: tsql

我在这里有点头疼。我试图对空表运行合并语句,但它抱怨标识列无法更新。这是我试过的代码:

    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"在我的桌子上。我错过了什么?这个错误是否与没有记录的表有关?

1 个答案:

答案 0 :(得分:0)

只需删除您正在更新screen_id = Source.screen_id的行。无论如何更新它都没有意义,因为为了使WHEN MATCHED返回true,首先必须使用相同的值。

您不需要删除整个UPDATE语句。您可以保留其余部分以更新其他列。