我讀過一本書如臨SQL Server 2008中的關係型數據庫的設計與實現洛伊絲·戴維森在那裏我找到建議檢查觸發內@@rowncount
:if it is = 0 then return
:在觸發器中檢查@@ rowcount = 0的目的是什麼?
if @@rowcount = 0 return
我m想知道如果沒有行被修改如何觸發觸發器?
我讀過一本書如臨SQL Server 2008中的關係型數據庫的設計與實現洛伊絲·戴維森在那裏我找到建議檢查觸發內@@rowncount
:if it is = 0 then return
:在觸發器中檢查@@ rowcount = 0的目的是什麼?
if @@rowcount = 0 return
我m想知道如果沒有行被修改如何觸發觸發器?
觸發器觸發了聲明正在運行。這將會觸發即使表是空的,或者如果語句影響任何行:
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 。要觸發一個觸發器,觸發事件非常重要,而不是受影響的行數。
另請注意,在SQL 2008中由MERGE語句觸發時,@@ rowcount在觸發器中的行爲並非預期並且不同。
Raj
感謝一個例子! –
在插入觸發器中檢查它也很重要嗎? – Muflix