2011-07-20 58 views
0

我在SQL Server 2008上的同一个数据库中有两个表。当我向第一个插入一行时,我想将一些字段复制到第二个表中。我做了一个触发器这样做,但问题是,有时当我非常快速地添加2行时,它只复制其中的一行。SQL Server插入后触发器不复制所有行

我的代码有什么问题?

USE [DB_NAME] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[triggerName] 
    ON [dbo].[table1] 
    AFTER INSERT 
AS 
BEGIN 
SET NOCOUNT ON; 

    INSERT INTO dbo.table2(L_UID, L_Mode, C_Name, C_Logon) 
     SELECT ins.L_UID, ins.L_Mode, ins.C_Name, temp.C_Remark AS Logon FROM INSERTED AS ins 
     INNER JOIN dbo.tEmploye AS temp 
     ON (temp.L_UID = ins.L_UID) 
     WHERE temp.C_Remark IS NOT NULL 

END 

回答

0

它几乎肯定与“加快速度”无关。我最好的猜测是你插入的行并不总是与tEmploye连接。尝试使它成为一个外连接(如果可能的话),看看你是否继续存在这些所谓的缺失行,或者如果你在表2中的C_Logon列中得到空值(我必须说表格的奇数名称---这样的混淆使得计算出一个可能的解决方案更困难)

+0

我总是测试相同的两行数据。当我慢慢做时,它可以正常工作,当我快速完成时,我在第一个表中获得了两个条目,而在第二个表中获得了两个条目。正因为如此,我知道INNER JOIN匹配并且C_Logon不为空。我正在用读卡器测试,我只有两个用户。 – Michal