1
我有一个触发器,它是如下:TSQL触发行为异常
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
它所需要做的是在htblB插入新行,当列CATEGORY_VALUE_ID被更新。如果只更新一行,它工作正常。但是如果它有多个行更新,那么将2个更新的行数更新的行插入到htblB中。
UPDATE dbo.tblCAPITATION
SET CAPITATION_STATUS_CATEGORY_VALUE_ID = '80574', UPDATE_SOURCE = 'TEST3'
WHERE CAPITATION_ID = 2 OR CAPITATION_ID = 3
本声明将插入4个新行htblB而不是2
可能请你能够解释为什么这是hapening以及如何防止它一些轻?
谢谢!
可以请你帮我明白了,为什么这个工作? 谢谢! – OBL
我想我明白了。因为两者的值相同。我愚蠢。 – OBL
插入的表格为您提供刚刚更新的行,您需要将它们连接回基表。你可以在主键上进行连接,否则你将看不到正确的行。您取得了在category_value_id上匹配的所有行的组合 – Gratzy