我读过一本书,例如,Pro SQL Server 2008 Relation Database Design And Implementation Lois Davidson,在那里我发现了检查@@rowcount
触发器内部的建议if it is = 0 then return
::
if @@rowcount = 0 return
我想知道是否修改了 no 行如何触发触发器?
我读过一本书,例如,Pro SQL Server 2008 Relation Database Design And Implementation Lois Davidson,在那里我发现了检查@@rowcount
触发器内部的建议if it is = 0 then return
::
if @@rowcount = 0 return
我想知道是否修改了 no 行如何触发触发器?
触发器为正在运行的语句触发。即使表为空,或者语句不影响任何行,它也会触发:
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
如您所见,即使没有插入任何行,触发器也会触发。
因为Trigger
无法知道触发事件影响了多少行,这就是您必须检查内部的原因。
触发事件被触发,因为触发事件已经发生。触发器不检查有多少行受到影响。因此,您必须检查@@rowcount
触发器体内。要触发触发器,触发事件很重要,而不是受影响的行数。
另请注意,@@rowcount
当 SQL Server 2008 中的 MERGE 语句触发时,触发器中的行为与预期不同,并且有所不同。