在触发器中检查@@ rowcount = 0的目的是什么?

时间:2013-01-17 08:33:24

标签: sql sql-server triggers

我已经阅读了一本书,例如, Pro SQL Server 2008关系数据库设计与实现Lois Davidson ,其中我找到了检查触发器内@@rowncount的建议:{ {1}}:

if it is = 0 then return

我想知道是否修改了no行怎么触发触发器?

3 个答案:

答案 0 :(得分:5)

触发语句运行的触发器。即使表为空,或者语句不影响行,它也会触发:

create table tr (i int);
go

create trigger g on tr after update
as 
print 'foo'
go


update tr set i = 2

@Muflix更新:

create table tr (i int);
go

create trigger g on tr after insert
as 
print 'foo'
go

insert into tr select * from tr;
go

如您所见,即使没有插入行,触发器也会触发。

答案 1 :(得分:2)

因为Trigger无法知道触发事件会影响多少行,这就是你必须在里面检查的原因。

答案 2 :(得分:1)

由于触发事件已发生,因此触发了触发器。触发器没有 检查受影响的行数。因此,您需要检查@@ rowcount 内触发体。要触发触发器,触发事件非常重要 而不是受影响的行数。

另请注意,SQL 2008中由MERGE语句触发时触发器中@@ rowcount的行为不符合预期且不同。

拉​​吉