Sql server 在SQL Server中,后插入触发器能否在同一个表中具有INSERT语句?
我不熟悉SQL Server触发器 假设我们在insert之后为表A编写一个Sql server 在SQL Server中,后插入触发器能否在同一个表中具有INSERT语句?,sql-server,triggers,Sql Server,Triggers,我不熟悉SQL Server触发器 假设我们在insert之后为表A编写一个触发器,在该触发器中,我们可以对同一个表(即表A)执行insert操作吗 有什么建议吗?是的,如果您可以禁用递归触发器 SP_CONFIGURE 'nested_triggers',0 GO RECONFIGURE GO 是的,你可以: CREATE TABLE tab(a INT); INSERT INTO tab(a) VALUES (1); CREATE TRIGGER trg_tab ON tab AF
触发器,在该触发器中,我们可以对同一个表(即表A
)执行insert
操作吗
有什么建议吗?是的,如果您可以禁用递归触发器
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
是的,你可以:
CREATE TABLE tab(a INT);
INSERT INTO tab(a) VALUES (1);
CREATE TRIGGER trg_tab ON tab
AFTER INSERT
AS
INSERT tab
SELECT a+1 FROM inserted;
INSERT INTO tab(a) VALUES (10);
SELECT *
FROM tab;
结果:
a
1
10
11
您可以使用来控制触发器应该或不应该运行的时间:
CREATE TRIGGER TR_YourTable_AfterInsert ON YourTable
AFTER INSERT
AS
BEGIN
DECLARE @contextInfo VARBINARY(128)
SELECT @contextInfo = CONTEXT_INFO()
IF (@contextInfo != 0x123456) BEGIN
INSERT INTO YourTable ...
END
SET CONTEXT_INFO 0x123456 --Setting the context info to prevent nested execution.
END
现在,您可以在插入之前显式设置值:
SET CONTEXT_INFO NULL; -- resetting to default
-- (not necessary when you are on a new connection)
INSERT INTO YourTable...
回答标题中的问题:是的,插入后触发器可以将行插入到同一个表中,但根据服务器的配置,它可能导致嵌套触发器执行。True,很好。然而,如果是这种情况,您有一个varbinary(128)字段来存储其中的任何内容,因此将其拆分为块非常有帮助。