SQL Server触发器插入整个表行,而不是新行

时间:2017-05-06 07:49:05

标签: sql-server tsql database-trigger

我在某个地方犯了一个错误但却无法理解。

情景是这样的: 每当在表'TestTrigger'中插入新行时,表TriggerInsert应该获得在TestTrigger中插入新行时的值捕获时间。

问题是,每当触发器命中时,而不是只是一个新行,每次都会在TestTrigger中重新填充整个表。我只想捕获,新行而不是整个表插入到每个触发器上。

这是我的触发器:

USE [irfaan]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Trigger [dbo].[InsertTriggerTest] on [irfaan].[dbo].[TestTrigger]
--For Insert
After insert
as
INSERT into TriggerInsert (CurrTime, IOFNum) SELECT (GetDate()), SONum   FROM TestTrigger

请在我出错的地方提供帮助。

2 个答案:

答案 0 :(得分:1)

如果您只想查看插入的行,则必须使用Inserted伪表 - dbo.TestTrigger基表....

ALTER TRIGGER dbo.InsertTriggerTest
ON irfaan.dbo.TestTrigger
FOR INSERT
AS 
   INSERT INTO TriggerInsert (CurrTime, IOFNum) 
       SELECT GETDATE(), SONum   
       FROM Inserted

答案 1 :(得分:1)

您的SELECT查询返回源表(TestTrigger)中的所有行。请改用表格插入。它将只包含插入TestTrigger的行,而不是您当前获得的所有行。

INSERT into TriggerInsert (CurrTime, IOFNum) SELECT (GetDate()), SONum   FROM Inserted