我已经阅读了一本书,例如, Pro SQL Server 2008关系数据库设计与实现Lois Davidson ,其中我找到了检查触发器内@@rowncount
的建议:{ {1}}:
if it is = 0 then return
我想知道是否修改了no行怎么触发触发器?
答案 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的行为不符合预期且不同。
拉吉