Wir haben eine Master-Benutzertabelle und viele -Tabellen, die sich auf die Benutzer-ID entweder beziehen
Wenn nun alles perfekt ist, sollte das Löschen eines Benutzers genauso einfach sein wie das Löschen in der Haupttabelle und die ON CASCADE-Einschränkungen, die ihn durch den Rest der Tabellen rippen. Das Problem ist, dass wir nicht zu 100% sicher sind, ob jede FK-Beziehung in jeder Tabelle (direkt oder indirekt) die ON CASCADE-Einschränkung hat. Wir müssen einen Weg finden, um das Löschen zu löschen und zu sehen, welche Tabellen der SQL Server tatsächlich berührt, um sie zu löschen. Ich las dies und versuchte es, aber es wird nicht angezeigt alle Tabellen kaskadiert in - nur die Einträge in der Master-Tabelle nur
Hier ist was ich versucht habe:
%Vor%Wie kann ich alle Tabellen sehen, die die obige Abfrage berühren würde?
HINWEIS: Die ON CASCADE-Einschränkung ist eine Einschränkung in der Datenbank, von der wir glauben, dass wir sie für jede -Tabelle beim Erstellen jeder Tabelle hinzugefügt haben. Beispiel für das Hinzufügen zu einer Tabelle
%Vor%Verwenden Sie zum Überprüfen der referenziellen Integritätsbedingungen in Ihrer gesamten Datenbank, die auf UserMasterTable verweisen, INFORMATION_SCHEMA-Ansichten.
%Vor%Dies gibt eine Liste der referenziellen Integritätsbedingungen zurück, die auf UserMasterTable abzielen, und für jede einzelne Tabelle, die auf UserMasterTable verweist, und auf die Regeln ON DELETE und ON UPDATE. Hieraus können Sie schnell erkennen, welche referenziellen Integritätsbedingungen die gewünschte CASCADE-Regel nicht erfüllen. Keine Notwendigkeit, Trigger-glücklich zu bekommen.
Um das auf "Enkel" -Referenzen zu erweitern, fügen Sie zwei weitere Join-Klauseln hinzu. Um es auf eine beliebige Anzahl von Ebenen zu erweitern, wählen Sie einen rekursiven CTE.
Ich denke, Sie können dies in Trigger (analysieren [eingefügt] Tabelle und suchen nach untergeordneten Tabellen). Als Beispiel: Sie können eine Tabelle erstellen, in der Abfragen zur Erkennung von Fremdschlüssel-Links gespeichert werden:
%Vor%Dann fülle es mit einer dynamischen Abfrage, die aus den Metadaten extrahiert wurde
%Vor%Ihre Abfrage in der Tabelle sieht wie folgt aus:
%Vor%Dann in Trigger können Sie Abfrage ausführen, um Nachricht zu drucken:
%Vor%Wenn Sie mehr "entfernte" Tabellen analysieren müssen, müssen Sie die Hierarchie in der FKCheck-Tabelle durchlaufen.
Tags und Links sql-server