2011-07-20 104 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