你尝试使用CONTEXT_INFO()
?
ALTER TRIGGER test1
ON table
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF NOT UPDATE(x)
RETURN;
DECLARE @ci varbinary(128) = CAST('Trigger=' + cast(OBJECT_NAME(@@PROCID) AS varchar(128)) + REPLICATE(' ', 128) as varbinary(128));
SET CONTEXT_INFO @ci;
UPDATE table
SET a = 1
WHERE id = 1;
SET CONTEXT_INFO 0x0; -- clear
END
GO
alter TRIGGER test2
ON table
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF NOT UPDATE(a)
RETURN;
DECLARE @ci varchar(128) = (SELECT CAST(CONTEXT_INFO() AS varchar) FROM master.dbo.SYSPROCESSES WHERE spid = @@SPID);
DECLARE @log varchar(2048) = CONCAT('CALLER:', @ci);
EXEC xp_logevent 60000, @log, informational;
-- update b
END
GO
这给我的日志消息:
Date 19.09.2017 18:31:21
Log SQL Server (Current - 19.09.2017 18:29:00)
Source spid74
Message
CALLER:Trigger=test1
一个字段添加到表,并在触发1.更新比触发2可以读取场 – GuidoG
@GuidoG围绕尼斯的工作 - 但加入指示我的所有表格(〜500)的列似乎都有问题.... :-) –
列A是否仅由触发器1更新?如果是这样,你可以检查触发器2,如果插入.A不同于删除.A – GuidoG