Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查触发器中@@rowcount=0的目的?_Sql_Sql Server_Triggers - Fatal编程技术网

Sql 检查触发器中@@rowcount=0的目的?

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

我读过一本书,例如,Pro SQL Server 2008关系数据库设计和实现Lois Davidson,其中我发现了检查触发器内
@@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]
执行
选择计数(*):