У меня есть триггер на столе, в основном это
ALTER TRIGGER xx
FOR UPDATE,DELETE,INSERT
AS
DELETE FROM other WHERE id in (SELECT id from deleted)
DELETE FROM other WHERE id in (SELECT id from inserted)
INSERT INTO other() VALUES() WHERE id in (SELECT id from inserted)
GO
Он работает очень медленно, когда выполняет вставку (20 секунд).Удаляет быстро.Играя вокруг, я попытался сделать это вместо этого:
ALTER TRIGER xx
FOR UPDATE,DELETE,INSERT
AS
DECLARE @tinserted TABLE ( id int)
INSERT INTO @tinserted select id from inserted;
DELETE FROM other WHERE id in (SELECT id from deleted)
DELETE FROM other WHERE id in (SELECT id from inserted)
INSERT INTO other() VALUES() WHERE id in (SELECT id from @tinserted)
GO
Используя переменную таблицы, она теперь запускается мгновенно (менее 1 секунды).
Хотя я не уверен, почему.Есть ли какая-то причина, почему переход на табличную переменную будет иметь такое значение?