Wie können Fremdschlüssel-Beschränkungen mit T-SQL vorübergehend deaktiviert werden?
Wird das Deaktivieren und Aktivieren von Fremdschlüssel-Beschränkungen in SQL Server unterstützt? Oder besteht meine einzige Möglichkeit darin, die Beschränkungen zu löschen und dann neu zu erstellen`?
804
3
Wenn Sie alle Beschränkungen in der Datenbank deaktivieren möchten, führen Sie einfach diesen Code aus:
Um sie wieder einzuschalten, führen Sie aus: (der Ausdruck ist natürlich optional und listet nur die Tabellen auf)
Ich finde es nützlich, wenn ich Daten von einer Datenbank in eine andere übertrage. Es ist ein viel besserer Ansatz als das Fallenlassen von Beschränkungen. Wie Sie bereits erwähnt haben, ist es sehr nützlich, wenn alle Daten in der Datenbank gelöscht und neu aufgefüllt werden (z. B. in einer Testumgebung).
Wenn Sie alle Daten löschen möchten, ist vielleicht diese Lösung hilfreich.
Manchmal ist es auch praktisch, alle Trigger zu deaktivieren. Die vollständige Lösung finden Sie hier.
http://www.sqljunkies.com/WebLog/roman/archive/2005/01/30/7037.aspx
Nach dem SQL-92-Standard kann eine Konstante als DEFERRABLE deklariert werden, so dass sie im Rahmen einer Transaktion (implizit oder explizit) verschoben werden kann. Leider fehlt diese SQL-92-Funktionalität in SQL Server noch immer.
Für mich ist das Ändern einer Einschränkung in NOCHECK gleichbedeutend mit dem Ändern der Datenbankstruktur im Handumdrehen - das Fallenlassen von Einschränkungen ist es auf jeden Fall - und etwas, das man vermeiden sollte (z. B. wenn Benutzer erhöhte Berechtigungen benötigen).