2010-11-15 143 views
1

有兩個表Table_TriggerTable_Trigger1。我已創建了Table_Trigger1觸發。它的工作原理是perfectly.Below我觸發腳本 -觸發器在SQL Server

CREATE TRIGGER Test_Trigger 
ON Table_Trigger1 

INSTEAD OF INSERT 

AS 
SET NOCOUNT ON 

INSERT INTO Table_Trigger1(FirstName) 
SELECT FirstName from INSERTED I 
WHERE I.firstName in (SELECT FirstName from Table_Trigger) 

,當我在那裏的條件是真的,我得到一個消息(1行(S)的影響)和值保存在Table.But當我在那裏的條件是假,那時候我也會收到一條消息(1 row(s)affected)和值不保存在表中。

我的問題是 - 如果條件是錯誤的,並且值不保存在表中,那麼爲什麼我得到(1行受影響)消息。這條消息的含義是什麼。

在此先感謝。

+0

你在這兩種情況下運行的確切語句是什麼? – Donnie 2010-11-15 14:03:49

回答

3

簡而言之,原始插入的「行受到影響」並不知道觸發器幕後發生了什麼。它傳遞一行並認爲該行「受到影響」。

我試圖找到一些文件來支持。我能來最接近的是在SqlCommand.ExecuteNonQuery的文件,其中規定:

對於UPDATE,INSERT和DELETE語句 ,返回值是 數受 命令行。當 表正被插入或更新時, 返回值包括受插入或 更新操作以及受觸發器或觸發器影響的 行數受影響的 行的數量。

當然,SET NOCOUNT ON在觸發抑制影響觸發器中的行數的迴歸,所以你只能看到原來的INSERT語句的結果。