5

たとえば、 Pro SQL Server 2008 Relation Database Design And Implementation Lois Davidsonの本を読んだことがあります。ここで@@rowcountは、トリガーの内部を確認するための提案を見つけましたif it is = 0 then return

if @@rowcount = 0 return

行が変更されていない場合、トリガーが発生するのはなぜですか?

4

3 に答える 3

6

実行中のステートメントに対してトリガーが起動します。テーブルが空の場合、またはステートメントが行に影響を与えなかった場合でも発生します。

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

ご覧のとおり、行が挿入されていない場合でもトリガーが起動します。

于 2013-01-17T08:38:35.963 に答える
2

トリガーTriggerイベントによって影響を受ける行の数を知ることができないため、内部をチェックする必要があります。

于 2013-01-17T08:37:06.990 に答える
1

トリガーイベントが発生したため、トリガーが発生します。トリガーは、影響を受ける行の数をチェックしません。したがって、@@rowcount トリガー本体の内部を確認する必要があります。トリガーを起動するには、影響を受ける行数ではなく、トリガーイベントが重要です。

また@@rowcount、SQL Server 2008でMERGEステートメントによって起動されたときのトリガー内の動作は、予期されたものではなく、異なることに注意してください。

于 2013-01-17T08:44:02.583 に答える