【问题标题】:How to Identify Which trigger fired (Updated or Delete)如何识别触发了哪个触发器(更新或删除)
【发布时间】:2013-03-24 00:17:42
【问题描述】:

如果我使用的触发器在我的付款表的每次更新或删除时触发,我如何识别发生的触发器类型(如果我解释更多,由于更新记录或删除记录而调用的触发器函数记录。)

因为我需要将这些信息存储在我的另一张桌子上。

【问题讨论】:

  • 这篇文章可能会有所帮助:stackoverflow.com/questions/5252802/…
  • 您确实需要识别您正在使用的数据库产品;答案将取决于此。
  • 我找到了答案。感谢每一位花时间在我的问题上的人。

标签: sql triggers


【解决方案1】:

说明:向表中插入数据时,只有'inserted'有新插入的行;当您从表中删除数据时,只有“已删除”具有已删除的行;当您更新表时,“插入”保存新行,“删除”保存旧行。

我认为这个样本可以给你一个提示。 (SQL Server 2012)
示例:
样本表定义:


create table Customer (
          ID int identity(1,1) not null, 
          FirstName varchar(30), 
          LastName varchar(30))
扳机:

CREATE TRIGGER TrackAction
ON Customer
AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
   DECLARE @DELETEDCOUNT INT
   DECLARE @INSERTEDCOUNT INT
   SELECT @DELETEDCOUNT = COUNT() FROM deleted
   SELECT @INSERTEDCOUNT = COUNT() FROM inserted
   IF(@DELETEDCOUNT&@INSERTEDCOUNT > 0 )
       PRINT 'Trigger by update action'
   ELSE IF (@DELETEDCOUNT > 0 )
       PRINT 'Trigger by delete action'
   ELSE IF (@INSERTEDCOUNT > 0 )
       PRINT 'Trigger by insert action'
END
测试代码:

insert into Customer 
values ('Bob','Ryan')
update customer 
set FirstName = 'Bob Jr.'
where FirstName = 'Bob'
delete customer 
where FirstName = 'Bob Jr.'
测试结果:
1.通过插入动作触发
2. 更新动作触发
3. 删除动作触发

【讨论】:

  • 非常感谢您的回答
【解决方案2】:

MS SQL 服务器?

你没有。

SQL 中有单个命令会同时进行更新、插入和删除(例如,参见 MERGE)。触发器将被调用一次,并填充 [deleted]、[inserted] 和 [updated] 伪表。谈论其中一个或另一个是否发生是没有意义的。

【讨论】:

    【解决方案3】:

    我在调试时使用的一个技巧是在触发器中使用 PRINT 来引用触发器名称。如果包含COUNT(*) FROM INSERTEDCOUNT(*) FROM DELETED,则可以观察消息输出(至少在 SSMS 中)以查看触发的触发器、触发的顺序以及触发它的是否是插入、更新或删除。插入将具有COUNT(*)=0 用于删除,删除将具有COUNT(*)=0 用于插入,更新将具有COUNT(*)>0 用于插入和删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多