Wie lösche ich eine Spalte mit der Standardeinschränkung in SQL Server 2008?
Meine Anfrage ist
alter table tbloffers
drop column checkin
Ich erhalte unter Fehler
Das Einchecken der ALTER TABLE DROP COLUMN ist fehlgeschlagen, da ein oder mehrere Objekte auf diese Spalte zugreifen.
Kann jemand meine Abfrage korrigieren, um eine Spalte mit Einschränkungen zu löschen?
sql-server
sql-server-2008
Robin Michael Poothurai
quelle
quelle
Antworten:
Zuerst sollten Sie das Problem löschen
DEFAULT constraint
, danach können Sie die Spalte löschenDer Fehler kann jedoch auch aus anderen Gründen auftreten - beispielsweise aufgrund der benutzerdefinierten Funktion oder Ansicht
SCHEMABINDING
, für die eine Option festgelegt wurde.UPD: Vollständig automatisiertes Löschen des Einschränkungsskripts:
quelle
Hier ist eine andere Möglichkeit, eine Standardeinschränkung mit einem unbekannten Namen zu löschen, ohne zuerst eine separate Abfrage ausführen zu müssen, um den Einschränkungsnamen abzurufen:
quelle
Sie können die Spalte und ihre Einschränkung (en) auch in einer einzelnen Anweisung und nicht einzeln ablegen.
Nachfolgend finden Sie einige dynamische SQL-Anweisungen, mit denen die Namen abhängiger Überprüfungsbeschränkungen und Standardeinschränkungen nachgeschlagen und zusammen mit der Spalte gelöscht werden
(aber keine anderen möglichen Spaltenabhängigkeiten wie Fremdschlüssel, eindeutige und Primärschlüsseleinschränkungen, berechnete Spalten, Indizes)
quelle
DROP CONSTRAINT
um die Grammatik zu sehen. Wenn Sie die Einschränkungen nicht explizit benennen, müssen Sie den Namen nachschlagen, den SQL Server dafür generiert hat, z. B. gemäß der Antwort von Marc. Nachdem Sie dies herausgefunden haben, können Sie die Einschränkung und die Spalte gleichzeitig löschen.Hier finden Sie die Standardeinschränkung für diese Abfrage:
Hier erhalten Sie den Namen der Standardeinschränkung sowie den Tabellen- und Spaltennamen.
Wenn Sie diese Informationen haben, müssen Sie zuerst die Standardeinschränkung löschen:
und dann können Sie die Spalte löschen
quelle
ALTER TABLE table DROP CONSTRAINT DF_XY DROP COLUMN XY
Leider ist die Syntax dieser Anweisung nicht korrektDROP
Befehle setzen, damit dies funktioniertDas Folgende funktionierte für mich gegen ein SQL Azure-Backend (mit SQL Server Management Studio), also YMMV, aber wenn es für Sie funktioniert, ist es einfacher als die anderen Lösungen.
quelle
Ich habe das gleiche:
ALTER TABLE DROP COLUMN ist fehlgeschlagen, weil ein oder mehrere Objekte auf diese Spaltennachricht zugreifen .
Meine Spalte hatte einen Index, der zuerst gelöscht werden musste. Die Verwendung von sys.indexes hat den Trick gemacht:
quelle
Ich habe das Skript ein wenig auf meine SQL Server-Version aktualisiert
quelle
Es ist nicht immer nur eine Standardeinschränkung, die verhindert, dass eine Spalte gelöscht wird, und manchmal können Indizes Sie auch daran hindern, die Einschränkung zu löschen. Also habe ich eine Prozedur geschrieben, die jeden Index oder jede Einschränkung für eine Spalte und die Spalte selbst am Ende löscht.
quelle