Все мои таблицы имеют триггер для операций CRUD. вот пример:
ALTER TRIGGER [dbo].[Cities_tr] ON [dbo].[Cities] AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @operation CHAR(6)
SET @operation = CASE WHEN EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
THEN 'Update'
WHEN EXISTS (SELECT * FROM inserted)
THEN 'Insert'
WHEN EXISTS(SELECT * FROM deleted)
THEN 'Delete'
ELSE NULL
END
IF @operation = 'Insert'
INSERT INTO history ([dt],[tname],[cuser] ,[id],op)
SELECT GETDATE(),'Cities', i.ldu, i.CityId,@operation
FROM inserted i
set nocount on
IF @operation = 'Update'
INSERT INTO history ([dt],[tname],[cuser] ,[id],op)
SELECT GETDATE(),'Cities', i.ldu, i.CityId,@operation
FROM deleted d, inserted i
END
Если я обновляю одну строку, все работает нормально, и триггер вставляет одну строку в историю.
Например
update top(1) cities set f=1
Но если обновлено более одной строки, будут вставлены строки updatedrow ^ 2.
Например, 9 для 3 строк 100 для 10 строк ...
Что не так с моим триггером и как я могу решить это?