我正在尝试在而不是插入触发器中执行身份插入,但是当我尝试将数据插入数据时,它会抛出错误消息“消息 544,级别 16,状态 1,第 36 行无法插入身份的显式值IDENTITY_INSERT 设置为 OFF 时表 'PixTest' 中的列。”。
我正在使用安装在 Windows 8 64 位上的 SQL SERVER 2014 Developer Edition 64 位。
以下是一些可能有帮助的示例代码:
CREATE TABLE PixTest
(
ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
TESTE VARCHAR(10)
)
GO
CREATE TRIGGER AutoIncrement_Trigger ON PixTest
instead OF INSERT AS
BEGIN
DECLARE @ID INT;
SELECT @ID=ID FROM inserted;
IF COALESCE(@ID,0)<> 0
BEGIN
SET IDENTITY_INSERT PixTest ON
INSERT INTO PixTest(ID, TESTE)
SELECT ID,TESTE FROM inserted
SET IDENTITY_INSERT PixTest off
END
ELSE
INSERT INTO PixTest(Teste)
SELECT TESTE FROM inserted;
END;
go
INSERT INTO PixTest(ID, TESTE) VALUES (1, 'TESTE 1')
GO
Run Code Online (Sandbox Code Playgroud)
我搜索了关于在触发器内使用 SET IDENTITY_INSERT 的信息,但找不到任何说明这是不可能的,但上面的代码似乎不起作用。
有任何想法吗?
该错误不是来自触发器。它来自您的插入语句。
INSERT INTO PixTest(ID, TESTE) VALUES (1, 'TESTE 1')
Run Code Online (Sandbox Code Playgroud)
在您到达触发器之前,它会被解析并返回错误。改成这个就可以了。
INSERT INTO PixTest(TESTE) VALUES ('TESTE 1')
Run Code Online (Sandbox Code Playgroud)