我在某个地方犯了一个错误但却无法理解。
情景是这样的: 每当在表'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
请在我出错的地方提供帮助。
答案 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