Ich habe 2 Tabellen: T1 und T2, es sind vorhandene Tabellen mit Daten. Wir haben eine Eins-zu-Viele-Beziehung zwischen T1 und T2. Wie ändere ich die Tabellendefinitionen, um ein kaskadierendes Löschen in SQL Server durchzuführen, wenn ein Datensatz aus T1 gelöscht wird? Alle zugeordneten Datensätze in T2 werden ebenfalls gelöscht.
Die fremde Beschränkung besteht zwischen ihnen. Ich möchte die Tabellen nicht löschen oder einen Trigger erstellen, um das Löschen für T2 durchzuführen. Wenn ich beispielsweise einen Mitarbeiter lösche, sollte auch der gesamte Überprüfungsdatensatz verschwunden sein.
T1 - Mitarbeiter,
Employee ID
Name
Status
T2 - Leistungsbeurteilungen,
Employee ID - 2009 Review
Employee ID - 2010 Review
sql-server
cascading-deletes
Bichvan Nguyen
quelle
quelle
So fügen Sie einem vorhandenen Fremdschlüssel in SQL Server Management Studio "Cascade delete" hinzu:
Wählen Sie zunächst Ihren Fremdschlüssel aus und öffnen Sie ihn in einem neuen Abfragefenster mit "DROP and Create To ..".
Fügen Sie dann einfach
ON DELETE CASCADE
denADD CONSTRAINT
Befehl hinzu:Klicken Sie auf die Schaltfläche "Ausführen", um diese Abfrage auszuführen.
Übrigens, um eine Liste Ihrer Fremdschlüssel zu erhalten und zu sehen, bei welchen "Kaskadenlöschung" aktiviert ist, können Sie dieses Skript ausführen:
Und wenn Sie jemals feststellen, dass Sie
DROP
aufgrund einer Fremdschlüsseleinschränkung keine bestimmte Tabelle finden können , aber nicht herausfinden können, welche FK das Problem verursacht, können Sie diesen Befehl ausführen:Die SQL in diesem Artikel listet alle FKs auf, die auf eine bestimmte Tabelle verweisen.
Hoffe das alles hilft.
Entschuldigung für den langen Finger. Ich habe nur versucht, einen Punkt zu machen.
quelle
Sie können dies mit SQL Server Management Studio tun.
→ Klicken Sie mit der rechten Maustaste auf das Tabellendesign, gehen Sie zu Beziehungen und wählen Sie den Fremdschlüssel im linken Bereich und im rechten Bereich aus, erweitern Sie das Menü "INSERT and UPDATE-Spezifikation" und wählen Sie "Cascade" als Delete Rule.
quelle
Verwenden Sie so etwas wie
Geben Sie die richtigen Spaltennamen ein und Sie sollten eingestellt sein. Wie mit mark_s richtig angegeben, müssen Sie möglicherweise zuerst die alte löschen und dann die neue erstellen, wenn bereits eine Fremdschlüsseleinschränkung vorhanden ist.
quelle
Aktivieren Sie zuerst die ONCascade-Eigenschaft:
1.Löschen Sie die vorhandene Fremdschlüsseleinschränkung
2. Fügen Sie eine neue mit aktivierter Einstellung ON DELETE CASCADE hinzu
Ex:
Zweitens, um die ONCascade-Eigenschaft zu deaktivieren:
1.Löschen Sie die vorhandene Fremdschlüsseleinschränkung
2. Fügen Sie eine neue hinzu, wobei die Einstellung ON DELETE NO ACTION aktiviert ist
Ex:
quelle
ON DELETE CASCADE
Es gibt an, dass die untergeordneten Daten gelöscht werden, wenn die übergeordneten Daten gelöscht werden.
Für diesen Fremdschlüssel haben wir die
ON DELETE CASCADE
Klausel angegeben , die SQL Server anweist, die entsprechenden Datensätze in der untergeordneten Tabelle zu löschen, wenn die Daten in der übergeordneten Tabelle gelöscht werden. Wenn in diesem Beispiel ein Wert für product_id aus der Produkttabelle gelöscht wird, werden auch die entsprechenden Datensätze in der Inventartabelle gelöscht, die diese product_id verwenden.quelle
Wenn die Eins-zu-Viele-Beziehung von T1 zu T2 ist, stellt sie keine Funktion dar und kann daher nicht zum Ableiten oder Ableiten einer Umkehrfunktion verwendet werden, die garantiert, dass der resultierende T2-Wert keine deduktiv gültigen Tupel von T1 Join T2 auslässt , weil es keine deduktiv gültige Umkehrfunktion gibt. (Die Darstellung von Funktionen war der Zweck von Primärschlüsseln.) Die Antwort in SQL lautet: Ja, Sie können dies tun. Die Antwort im relationalen Denken ist nein, Sie können es nicht tun. Siehe Mehrdeutigkeitspunkte in Codd 1970. Die Beziehung müsste von T1 zu T2 viele zu eins sein.
quelle
Ich denke, Sie können nicht einfach die Eigenschaft tables löschen. Wenn es sich um tatsächliche Produktionsdaten handelt, löschen Sie einfach den Inhalt, der das Tabellenschema nicht beeinflusst.
quelle