我有以下代码:
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
无法更新标识列'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)
);
我找不到问题..有什么帮助吗?
答案 0 :(得分:4)
尝试从MERGE的UPDATE部分删除标识列。
正如它所说,IDENTITY_INSERT是INSERT,而不是UPDATE。此外,您在JOIN中包含该字段,因此UPDATE实际上永远不会实际更改该值。
答案 1 :(得分:1)
您无法 更新 标识列上的值。您需要使用所需的值创建一个新行,并删除现有的行。