有很多问题可以涵盖此错误,但我遇到的问题是:
A)我目前正在进行合并(带有插入)
B)我没有明确设置身份列!
我的存储过程(表名和属性混淆):
表定义
CREATE TABLE MyTable (
[ID] BIGINT IDENTITY(1, 1) NOT NULL,
[Value] NVARCHAR (256) NOT NULL,
[Property] NVARCHAR (256) NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED ([ID] ASC),
CONSTRAINT [IX_MyTable] UNIQUE NONCLUSTERED ([Value] ASC)
);
存储过程定义
CREATE TYPE TempType as Table (
[TempValue] nvarchar(256) NOT NULL,
[TempProperty] nvarchar(256) NOT NULL,
);
GO
CREATE PROCEDURE [Name]
@Source TempType READONLY
AS
BEGIN
MERGE [MyTable] as target
USING (SELECT * FROM @Source) as source (TempValue, TempProperty)
ON (target.Value = source.TempValue)
WHEN MATCH THEN
UPDATE SET Value = source.TempValue, Property = source.TempProperty
WHEN NOT MATCHED THEN
INSERT ([Value], [Property])
VALUES (source.TempValue, source.TempProperty)
OUTPUT deleted.*, $action, inserted.* INTO [MyTable];
END
据我所知,我没有在任何地方明确指定该IDENTITY
列。我正在指定一个UNIQUE
-ly 约束列。
最后,与错误所说的相反,指定IDENTITY_INSERT ON
什么都不做。
编辑:我还应该指定,从.dacpac
通过 C# 部署时出现此错误。