たとえば、 Pro SQL Server 2008 Relation Database Design And Implementation Lois Davidsonの本を読んだことがあります。ここで@@rowcount
は、トリガーの内部を確認するための提案を見つけましたif it is = 0 then return
。
if @@rowcount = 0 return
行が変更されていない場合、トリガーが発生するのはなぜですか?
たとえば、 Pro SQL Server 2008 Relation Database Design And Implementation Lois Davidsonの本を読んだことがあります。ここで@@rowcount
は、トリガーの内部を確認するための提案を見つけましたif it is = 0 then return
。
if @@rowcount = 0 return
行が変更されていない場合、トリガーが発生するのはなぜですか?
実行中のステートメントに対してトリガーが起動します。テーブルが空の場合、またはステートメントが行に影響を与えなかった場合でも発生します。
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ステートメントによって起動されたときのトリガー内の動作は、予期されたものではなく、異なることに注意してください。