sql - IDENTITY INSERT 不适用于 MERGE

标签 sql sql-server

我有以下代码:

PRINT N'Merging Wide Format Types...'
SET IDENTITY_INSERT WideFormatTypes ON
GO
MERGE INTO WideFormatTypes AS Target
USING (VALUES 
    (1, N'****', NULL),
    (2, N'****', NULL),
    (3, N'******', NULL),
    (4, N'*******', NULL),
    (5, N'******', NULL),
    (6, N'*******', NULL)
)
AS Source (TypeID, TypeName, Description) 
ON Target.TypeID = Source.TypeID
WHEN MATCHED THEN
    UPDATE SET
    TypeID = Source.TypeID,
    TypeName = Source.TypeName,
    Description = Source.Description
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (TypeID, TypeName, Description) 
    VALUES (TypeID, TypeName, Description);

SET IDENTITY_INSERT WideFormatTypes OFF
GO

它返回一个错误

Msg 8102, Level 16, State 1, Line 1
Cannot update identity column 'TypeID'



该表声明如下:
CREATE TABLE [dbo].[WideFormatTypes] 
(
    [TypeID]      INT             IDENTITY (1, 1) NOT NULL,
    [TypeName]    NVARCHAR (500)  NOT NULL,
    [Description] NVARCHAR (1000) NULL,
    PRIMARY KEY CLUSTERED ([TypeID] ASC)
);

我找不到问题..有什么帮助吗?

最佳答案

尝试从 MERGE 的 UPDATE 部分删除标识列。

IDENTITY_INSERT 是,正如它所说的,用于插入,而不是更新。此外,您在 JOIN 中包含该字段,因此 UPDATE 无论如何都不会实际更改该值。

关于sql - IDENTITY INSERT 不适用于 MERGE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176144/

相关文章:

mysql - 在SQL中对时间(AM/PM)进行排序?

sql - 在函数中查询多个值并返回 1 个变量

用于查找表中缺失值的 SQL 查询

mysql - 根据 x 和 y 列检查 SQL 数据库中附近对象的最佳方法

sql - 目标中不存在重复项时违反主键约束错误

c# - 当鼠标悬停在 'Edit' 链接上时,Gridview 中的 CSS Frozen Header 会向上滚动

sql - 查找每个第二个和第四个星期四

sql-server - 如何使用哈希字节(如校验和)?

mysql - 如何修复 MySQL 查询以解决 "Unknown column...in On clause"错误?

sql - 带有时区顺序的 OSX postgres 9.1.4 时间戳