2010-04-30 111 views
0

我有sql server 2005,需要爲插入查詢創建觸發器。插入表的觸發器

我有表naemd作爲「日誌」與名爲UserID,UserName,LogDate,LogTime列,並希望將數據傳輸到名爲具有相同列名稱的「DataTable」的其他表中。

我創建觸發器

GO 

SET ANSI_NULLS ON 

GO 

SET QUOTED_IDENTIFIER ON 

GO 

CREATE TRIGGER [dbo].[Transfer] on [dbo].[Log] 
AFTER INSERT 
AS 
BEGIN 

insert into DataTable (UserID,UserName,LogDate,LogTime) 

SELECT UserID,UserName,LogDate,LogTime 
FROM Log where UserID not in(select UserID from DataTable) 

END 

新的數據在「日誌」每天更新一次表,所以我想從日誌表的新數據傳輸到數據表與trigger.Execution時間是非常高的,因此沒有輸出。

+4

有什麼問題插入數據? – 2010-04-30 14:48:43

+1

我不確定我明白你在這裏要做什麼。你能解釋你想達到的目標嗎? – 2010-04-30 14:55:07

+0

@Mitch ...借調! – kevchadders 2010-04-30 14:55:19

回答

0

在您的觸發器定義中,您應該使用inserted表,其中包含添加到日誌表中的所有行。

+0

在他的情況下不需要連接:) – silent 2010-04-30 14:58:55

+0

如果他只是想插入新的行週期,作爲審計日誌可以這麼說,不需要連接,只需要一個直接的SELECT ... FROM INSERTED。 – eidylon 2010-04-30 15:00:57

+0

感謝:更新。 – 2010-04-30 15:13:38

2

你已經「插入」在觸發器表,所以你可以從它

insert into DataTable (UserID, UserName, LogDate, LogTime) 
select UserID, UserName, LogDate, LogTime 
from inserted 
+0

是的,從基表中選擇將每次插入所有行,而不僅僅是新行。這可以很容易地解釋很長的執行時間。 我願意打賭美元甜甜圈你真的需要改變INSERT ... SELECT ... FROM LOG ... INSERT ... SELECT ... FROM INSERTED。 – eidylon 2010-04-30 14:59:58