对于TSQL插入/更新触发器,可以插入和删除都为空吗?

时间:2012-08-03 07:36:40

标签: tsql triggers

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

以下是相关的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 个答案:

答案 0 :(得分:5)

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

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