触发器中的IDENTITY_INSERT

3

在表触发器中打开它是可能的吗?

我尝试创建一个带有SET IDENTITY_INSERT tableName ON语句的触发器。

但是当我打开触发器定义时,我发现这个语句不在那里...

这是我用来更改触发器以添加IDENTITY_INSERT的查询,但是当我打开定义时,IDENTITY_INSERT被删除了...

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET IDENTITY_INSERT dbo.MyTable ON
GO

ALTER TRIGGER [dbo].[MyTrigger]
ON [dbo].[MyTable]
AFTER INSERT AS



INSERT INTO MyOtherTable
(   
    // values
)


SET IDENTITY_INSERT dbo.MyTable OFF
1个回答

2

要在触发器中开启和关闭它,您需要将SET IDENTITY_INSERT ON放在这里:

AFTER INSERT AS

SET IDENTITY_INSERT dbo.MyTable ON

而不是在触发器定义开始之前。在当前位置,它只在创建触发器时处于开启状态,而不是在实际使用时。


你知道我需要设置哪种权限给SQL账户才能执行那个IDENTITY_INSERT语句吗? - pdiddy
用户需要在相关表上拥有 ALTER TABLE 权限。 - MartW
我建议您在触发器内使用 EXECUTE AS 选项来减少潜在的漏洞。 - MartW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接