【发布时间】:2012-05-10 05:40:53
【问题描述】:
我有一个触发器如下:
ALTER TRIGGER [trigger_CATEGORY_VALUE_ID] ON [dbo].[tblA]
FOR UPDATE
AS
SET NOCOUNT ON
IF ( UPDATE([CATEGORY_VALUE_ID]))
BEGIN
INSERT INTO [dbo].[htblB]
( ID
, CATEGORY_VALUE_ID
, STATUS_END_DATE
, STATUS_END_DATE_SOURCE)
SELECT
t.ID
, t.CATEGORY_VALUE_ID
, GETDATE()
, t.UPDATE_SOURCE
FROM [dbo].[tblCAPITATION] t
INNER JOIN inserted ins
ON t.CATEGORY_VALUE_ID = ins.CATEGORY_VALUE_ID
END
它需要做的是在更新列 CATEGORY_VALUE_ID 时在 htblB 中插入一个新行。如果只更新一行,它工作正常。但是如果它有多个行更新,那么 2 的行数的幂更新的新行数被插入到 htblB 中。
UPDATE dbo.tblCAPITATION
SET CAPITATION_STATUS_CATEGORY_VALUE_ID = '80574', UPDATE_SOURCE = 'TEST3'
WHERE CAPITATION_ID = 2 OR CAPITATION_ID = 3
此语句将向 htblB 插入 4 个新行,而不是 2 个。
请您解释一下为什么会出现这种情况以及如何预防?
谢谢!
【问题讨论】: