2010-11-15 97 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语句的结果。