【问题标题】:For a TSQL insert/update trigger, can inserted and deleted both be empty?对于 TSQL 插入/更新触发器,插入和删除都可以为空吗?
【发布时间】:2012-08-01 05:46:47
【问题描述】:

我一直在使用 TSQL 触发器,假设插入的表始终包含插入或更新的记录,而删除的表始终包含更新的记录(我忽略了删除)。

这是相关的 MSDN 文章:

http://msdn.microsoft.com/en-us/library/ms191300.aspx

但是,我遇到过插入和删除都是空的情况。这是我一直在使用的测试触发器。

CREATE TRIGGER [dbo].[InsertUpdateTest] ON [dbo].[Test] 
AFTER INSERT, UPDATE 
AS
    DECLARE @countInserted INT
    DECLARE @countDelete INT

    SET @countInsert = (SELECT COUNT(*) FROM INSERTED)
    SET @countDeleted = (SELECT COUNT(*) FROM DELETED)

    IF (@countInserted = 0 AND @countDelete = 0)
    BEGIN
        print 'Inserted and deleted are both empty'
    END

在什么情况下会发生这种情况?

【问题讨论】:

  • +1 实际上,这对您来说是个问题吗?当然,如果inserteddeleted 中没有行,那么您希望在此触发器中执行的任何操作都不会影响任何行,因此计算量不会很大。
  • @Bridge - 通常情况下,是的,但我仍然想知道为什么触发器在这些条件下会触发。我还发现 UPDATE() 函数可以用来测试列的变化,当插入和删除为空时返回 true。

标签: tsql triggers


【解决方案1】:

回答我自己的问题。当触发表上的更新语句不更新任何行时,就会发生这种情况。触发器仍会触发,但插入和删除的表为空。例如:

UPDATE Test Set somefield=0 WHERE id='Values does not exist'

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2011-05-05
    • 2011-02-27
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2011-11-25
    相关资源
    最近更新 更多