首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测是否由其他触发器SQL服务器执行操作?

问检测是否由其他触发器SQL服务器执行操作?
EN

Stack Overflow用户
提问于 2017-09-19 10:18:35
回答 1查看 53关注 0票数 1

我正在使用SQL SERVER 2014。

我有一个table,其中有2个触发器(for update)。

触发器1-更新列A。(这将导致调用触发器2)

触发器2-更新列B。(导致调用触发器1)

问题:

在触发器中-是否能够识别当前更新是通过触发器触发的?

例子:

1-用户更新了表

2-触发1次更新,A列

3由于步骤2调用了-Trigger 2。

4-在触发器2-是否有任何代码可以检测到更新是通过触发器在step2?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 15:43:11

你试过用CONTEXT_INFO()吗?

代码语言:javascript
复制
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

这给了我日志信息:

代码语言:javascript
复制
Date        19.09.2017 18:31:21
Log     SQL Server (Current - 19.09.2017 18:29:00)

Source      spid74

Message
CALLER:Trigger=test1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46297910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档