Я пытаюсь создать базовый триггер базы данных, который условно удаляет строки из базы данных1.table1, когда строка из базы данных2.table2 удаляется. Я новичок в триггерах и надеялся узнать лучший способ добиться этого. Это то, что у меня есть до сих пор. Предложения?SQL Server ON DELETE Trigger
CREATE TRIGGER sampleTrigger
ON database1.dbo.table1
FOR DELETE
AS
IF EXISTS (SELECT foo
FROM database2.dbo.table2
WHERE id = deleted.id
AND bar = 4)
-- If there is a row that exists in database2.dbo.table2
-- matching the id of the deleted row and bar=4, delete
-- it as well.
-- DELETE STATEMENT?
GO
Вам нужно учесть, что триггер запускается ** один раз за утверждение ** (и ** NOT ** один раз pe r row, как полагают многие разработчики) и что псевдо-таблица «Deleted» может содержать ** несколько строк ** (если ваш оператор удалил несколько строк) –
@marc_s - в системе только одна строка может быть удалена за раз (прикладной интерфейс). Не могли бы вы рассказать о том, что вы имеете в виду. Это так же просто, как изменение 'WHERE id = deleted.id' на' WHERE id IN (SELECT id FROM deleted) '? –
@ShawnH. Да, это должно быть так просто. Я думаю, что Marc означает, что если каким-то образом вызывается массовое удаление, откуда-то запускается только один раз для всего оператора, а не для строки, поэтому использование 'IN' должно сортировать его в любом случае. – Bridge