2013-01-17 28 views

回答

5

觸發器觸發了聲明正在運行。這將會觸發即使表是空的,或者如果語句影響任何行:

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 

正如你看到的,即使插入沒有行觸發器觸發。

+0

感謝一個例子! –

+0

在插入觸發器中檢查它也很重要嗎? – Muflix

2

監守Trigger將無法​​知道有多少行是通過觸發事件,這就是爲什麼你必須檢查裏面的影響。

1

觸發器被解僱了,因爲觸發事件已發生。觸發器不會 檢查有多少行受到影響。因此,您必須檢查觸發器內部的@@ rowcount 。要觸發一個觸發器,觸發事件非常重要,而不是受影響的行數。

另請注意,在SQL 2008中由MERGE語句觸發時,@@ rowcount在觸發器中的行爲並非預期並且不同。

Raj