【问题标题】:Trigger for insert table插入表的触发器
【发布时间】:2010-04-30 14:47:47
【问题描述】:

我有 sql server 2005,需要为插入查询创建触发器。

我将表 naemd 命名为“Log”,列名为 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

新数据在“日志”表中每天更新,所以我想用触发器将新数据从日志表传输到数据表。执行时间非常长,所以没有输出。

【问题讨论】:

  • 我不确定我是否理解您在这里想要做什么。你能解释一下你想要达到的目标吗?

标签: sql-server triggers


【解决方案1】:

您在触发器中有“插入”表,因此您可以从中插入数据

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

【讨论】:

  • 是的,从基表中选择将每次插入所有行,而不仅仅是新行。这可以很容易地解释长执行时间。我愿意将美元赌在甜甜圈上,您确实需要将 INSERT ... SELECT ... FROM LOG 更改为 INSERT ... SELECT ... FROM INSERTED 。
【解决方案2】:

在您的触发器定义中,您应该使用inserted 表,其中包含添加到日志表中的所有行。

【讨论】:

  • 在他的情况下不需要加入:)
  • 如果他只是想插入新行期间,可以说是审计日志,不需要连接,只需直接 SELECT ... FROM INSERTED 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2016-10-13
  • 2016-01-27
  • 2011-03-06
相关资源
最近更新 更多