你嘗試使用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