2010-04-30 112 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