Как я могу получить доступ к удаленным родительским данным в каскадном удалении? - PullRequest
1 голос
/ 23 октября 2019

У меня есть три таблицы, давайте назовем их GrandParent, Parent и Child. Родитель имеет внешний ключ первичного ключа GrandParent, настроенный с помощью каскадного удаления. Аналогично, у Child есть внешний ключ к первичному ключу Parent.

В настоящее время я пытаюсь создать триггер, чтобы при удалении записи в любой из трех таблиц (Grandparent, Parent или Child), янужно вызвать хранимую процедуру. Для завершения своей работы хранимой процедуре требуется первичный ключ дедушки и значение из столбца для дочернего элемента.

В настоящее время я рассматриваю создание триггера для дочернего элемента. Моя проблема заключается в том, что к тому времени, когда я получаю запуск триггера, когда триггер установлен на «УДАЛЕНО», значения либо исчезают, либо становятся недоступными из базы данных для GrandParent, а в удаленной виртуальной таблице есть данные только для дочернего элемента. таблица.

Я пытался использовать триггер "INSTEAD OF DELETE", но, очевидно, его нельзя использовать для таблицы с каскадным удалением.

Есть ли какой-либо способ доступа к даннымот GrandParent или Parent в триггере DELETE ребенка? Если бы я мог хотя бы добраться до Parent, я мог бы использовать Внешний ключ, чтобы получить то, что мне нужно, из таблицы GrandParent.


CREATE TRIGGER [DeletionTrigger] ON [Child] 
    ON DELETE
    AS
         DECLARE @ParentID int
         DECLARE @ApplicationID int
         DECLARE @GPID int

         SELECT @ParentID = ParentID, @ApplicationID = ApplicationID FROM deleted --ApplicationID is the item needed from Child table

         SELECT @GPID = GPID FROM Parent WHERE Parent.ParentID = @ParentID

         EXEC DeletionNotifier @GPID, @ApplicationID
    END 
...