Sql 检查触发器中@@rowcount=0的目的?
我读过一本书,例如,Pro SQL Server 2008关系数据库设计和实现Lois Davidson,其中我发现了检查触发器内Sql 检查触发器中@@rowcount=0的目的?,sql,sql-server,triggers,Sql,Sql Server,Triggers,我读过一本书,例如,Pro SQL Server 2008关系数据库设计和实现Lois Davidson,其中我发现了检查触发器内@@rowncount的建议:如果它为=0,则返回: if @@rowcount = 0 return 我想知道no行是否被修改,触发器是如何触发的?因为trigger无法知道有多少行受到触发事件的影响,这就是您必须检查内部的原因。触发器为正在运行的语句触发。即使该表为空,或者该语句不影响任何行,它也会激发: create table tr (i int); go
@@rowncount
的建议:如果它为=0,则返回:
if @@rowcount = 0 return
我想知道no行是否被修改,触发器是如何触发的?因为trigger
无法知道有多少行受到触发事件的影响,这就是您必须检查内部的原因。触发器为正在运行的语句触发。即使该表为空,或者该语句不影响任何行,它也会激发:
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
正如您所看到的,即使没有插入任何行,触发器也会触发。触发触发器是因为发生了触发事件。触发器不起作用
检查受影响的行数。因此,您必须检查@@rowcount
在触发器体内。要触发触发器,触发事件非常重要且
不是受影响的行数
还要注意的是,在SQL 2008中,当MERGE语句触发时,触发器中的@rowcount的行为与预期不同
Raj在插入触发器中检查此项也很重要?触发器可以从[inserted]
执行选择计数(*):