Wenn ich alle Tabellen in meiner Datenbank auf diese Weise löschen möchte, wird dann die Fremdschlüsseleinschränkung berücksichtigt? Wenn nicht, wie kümmere ich mich zuerst darum?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Antworten:
Nein, dies wird Ihre Tabelle nicht löschen, wenn tatsächlich Fremdschlüssel darauf verweisen.
Um alle Fremdschlüsselbeziehungen abzurufen, die auf Ihre Tabelle verweisen, können Sie dieses SQL verwenden (wenn Sie SQL Server 2005 oder höher verwenden):
und wenn es welche gibt, können Sie mit dieser Anweisung hier SQL-Anweisungen erstellen, um diese FK-Beziehungen tatsächlich zu löschen:
quelle
In SQL Server Management Studio 2008 (R2) und höher können Sie mit der rechten Maustaste auf klicken
Wählen Sie die Tabellen aus, die Sie fallen lassen möchten.
Wählen Sie "In neuem Abfragefenster speichern".
Klicken Sie auf die Schaltfläche Erweitert.
Setzen Sie Script DROP und CREATE auf Script DROP.
Setzen Sie Script Foreign Keys auf True.
OK klicken.
Klicken Sie auf Weiter -> Weiter -> Fertig stellen.
Zeigen Sie das Skript an und führen Sie es aus.
quelle
Wenn Sie zuerst die "untergeordnete" Tabelle löschen, wird auch der Fremdschlüssel gelöscht. Wenn Sie versuchen, die "übergeordnete" Tabelle zuerst zu löschen, erhalten Sie die Meldung "Objekt 'a' konnte nicht gelöscht werden, da es durch eine FOREIGN KEY-Einschränkung referenziert wird." Error.
quelle
Hier ist eine andere Möglichkeit, alle Tabellen mithilfe der
sp_MSdropconstraints
Prozedur korrekt zu löschen. Der kürzeste Code, den ich mir vorstellen kann:quelle
Wenn es sich um SQL Server handelt, müssen Sie die Einschränkung löschen, bevor Sie die Tabelle löschen können.
quelle
Etwas allgemeinere Version von dem, was @mark_s gepostet hat, das hat mir geholfen
Stecken Sie einfach Ihren Tabellennamen ein und führen Sie das Ergebnis aus.
quelle
Hier ist eine andere Möglichkeit, alle Einschränkungen, denen die Tabellen selbst folgen, mithilfe eines Verkettungstricks zu löschen, bei
FOR XML PATH('')
dem mehrere Eingabezeilen in einer einzigen Ausgabezeile zusammengeführt werden. Sollte mit SQL 2005 und höher funktionieren.Ich habe die EXECUTE-Befehle aus Sicherheitsgründen auskommentiert.
quelle
Hier ist ein vollständiges Skript zum Implementieren einer Lösung:
quelle
quelle
Mit SQL Server Manager können Sie Fremdschlüsseleinschränkungen von der Benutzeroberfläche entfernen. Wenn Sie die Tabelle löschen möchten,
Diary
die Benutzertabelle jedoch einen Fremdschlüssel hatDiaryId
, der auf dieDiary
Tabelle verweist, können Sie die Tabelle erweitern (mithilfe des Plus-Symbols)User
und anschließend denForeign Keys
Abschnitt erweitern. Klicken Sie mit der rechten Maustaste auf den Fremdschlüssel, der auf die Tagebuch-Tabelle zeigt, und wählen Sie dann ausDelete
. Sie können dann denColumns
Abschnitt erweitern, mit der rechten Maustaste klicken und die SpalteDiaryId
ebenfalls löschen . Dann können Sie einfach laufen:Ich weiß, dass Ihre eigentliche Frage das Löschen aller Tabellen betrifft, daher ist dies in diesem Fall möglicherweise nicht hilfreich. Wenn Sie jedoch nur einige Tabellen löschen möchten, ist dies meines Erachtens nützlich (der Titel erwähnt nicht ausdrücklich das Löschen aller Tabellen).
quelle
Wenn Sie sich auf einem MySQL-Server befinden und es Ihnen nichts ausmacht, Ihre Tabellen zu verlieren, können Sie mit einer einfachen Abfrage mehrere Tabellen gleichzeitig löschen:
Auf diese Weise spielt es keine Rolle, in welcher Reihenfolge Sie die Tabelle in Ihrer Abfrage verwenden.
Wenn jemand etwas darüber sagen will, dass dies keine gute Lösung ist, wenn Sie eine Datenbank mit vielen Tabellen haben: Ich stimme zu!
quelle
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
funktioniert nicht auf MSSQL Server. Ich denke, das ist eine MySql-spezifische Variable.Führen Sie den folgenden Code aus, um den Namen der Fremdschlüsseleinschränkung zu erhalten, der Ihre Ablage blockiert. Zum Beispiel nehme ich den
roles
Tisch.Sie erhalten den FK-Namen wie folgt:
FK__Table1__roleId__1X1H55C1
Führen Sie nun den folgenden Code aus, um die von oben erhaltene FK-Referenz zu entfernen.
Getan!
quelle
Dann ist es viel einfacher, die gesamte Datenbank zu löschen:
quelle
Wenn Sie
DROP
eine Tabelle verwenden möchten, auf die von einer anderen Tabelle mit dem Fremdschlüssel verwiesen wurde, verwenden SieDROP TABLE *table_name* CASCADE CONSTRAINTS;
Ich denke, es sollte für dich funktionieren.
quelle
cascade constraints
in SQL Server