2016-04-18 3 views
4

Ich habe 3 Tabelle (Main, Detail, SubDetail) mit Kaskade löschen Beziehung. definieren Sie auch AFTER Trigger auf SubDetail, um einige Daten zu prüfen.Zugriff auf gelöschte Zeilen der übergeordneten Tabelle in Kind-Trigger

SubDetail-Trigger müssen Detail-Tabelle für einige Daten beitreten, aber im Falle von Datensatz löschen, kann ich nicht auf Detail Datensatz zugreifen.

Beispiel:

SELECT * 
FROM DELETED JOIN Detail on DELETED.DetailId = Detail.Id 

Wie gelöschten Datensatz der Detailtabelle für den Zugriff auf in SubDetail Trigger-???

UPDATE:

Warum Tabelle Hint nicht in meinem Szenario arbeiten? es muss alles in einer Transaktion tun

+0

So, wenn Sie aus 'Detail' Tabelle löschen - es löscht von' SubDetail' dann warum nicht Verwenden Sie 'After Delete' Trigger auf' Details' Tabelle, die verwandte Daten von 'SubDetail' Tabelle erhalten? – gofr1

+0

Sie haben Recht, aber ich mag es nicht, weil es viele Beziehungen hat! Durch Kaskadenlöschung kann ich sicherstellen, dass Code für irgendeine Beziehung nicht vergessen wurde! – Hamid

Antwort

1

Wahrscheinlich können Sie nicht zu Defail Tabelle beizutreten, da der Datensatz nicht in Detail-Tabelle vorhanden ist, weil Sie versuchen, nach LÖSCHEN beizutreten, und Sie Kaskade löschen haben. Sie können dies tun, indem Sie Trigger INSTEAD OF oder entfernen Kaskaden löschen und löschen Datensatz im nach Trigger oder Reihenfolge der Löschung von Tabellen

+0

Warum sql Server nicht alle Kaskadenaufzeichnungen löschen und dann Selbstaufzeichnungen löschen ??? Bitte beachten Sie, dass ich Text auf SubDetail-Trigger drucken und es zuerst anzeigen !! – Hamid

+0

Ich mache ein paar Tests und diese Antwort ist richtig. Selbst wenn Sie aus 'Details'-Zeilen in einer History-Tabelle gelöscht werden und versuchen, sie nach dem Lösch-Trigger in' Subdetails 'zu fügen, werden die benötigten Daten nicht erhalten. – gofr1

+0

@Hamid es handelt sich um eine Reihenfolge der Ausführung, zum Beispiel: wenn Sie DELETE FROM MAIN WHERE ID = ... dann sql Server löschen alle referenzierte Tabelle in diesem Beispiel Detail, nach dem Löschen Detail wird Main löschen und danach wird es ausgeführt nach Trigger auf Detail und auf Main –

Verwandte Themen