次のようなトリガーがあります。
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 に新しい行を挿入する必要があります。1 行だけが更新されれば問題なく動作します。ただし、複数の行の更新がある場合は、更新された行数の 2 乗の数の新しい行が htblB に挿入されます。
UPDATE dbo.tblCAPITATION
SET CAPITATION_STATUS_CATEGORY_VALUE_ID = '80574', UPDATE_SOURCE = 'TEST3'
WHERE CAPITATION_ID = 2 OR CAPITATION_ID = 3
このステートメントは、htblB に 2 行ではなく 4 行を挿入します。
なぜこれが起こっているのか、そしてそれを防ぐ方法を教えてください。
ありがとう!