In Microsoft SQL Server ist mir bekannt, dass die Abfrage zum Überprüfen, ob eine Standardeinschränkung für eine Spalte vorhanden ist, und das Löschen einer Standardeinschränkung wie folgt lautet:
IF EXISTS(SELECT * FROM sysconstraints
WHERE id=OBJECT_ID('SomeTable')
AND COL_NAME(id,colid)='ColName'
AND OBJECTPROPERTY(constid, 'IsDefaultCnst')=1)
ALTER TABLE SomeTable DROP CONSTRAINT DF_SomeTable_ColName
Aufgrund von Tippfehlern in früheren Versionen der Datenbank kann der Name der Einschränkung jedoch DF_SomeTable_ColName
oder sein DF_SmoeTable_ColName
.
Wie kann ich die Standardeinschränkung ohne SQL-Fehler löschen? Standardbeschränkungsnamen werden in der Tabelle INFORMATION_SCHEMA nicht angezeigt, was die Dinge etwas schwieriger macht.
So etwas wie "Löschen Sie die Standardeinschränkung in dieser Tabelle / Spalte" oder "Löschen DF_SmoeTable_ColName
", aber geben Sie keine Fehler an, wenn sie nicht gefunden werden kann.
sql
sql-server
tsql
Roboter
quelle
quelle
Antworten:
Das folgende Skript erweitert den Code von Mitch Wheat und generiert den Befehl, die Einschränkung zu löschen und dynamisch auszuführen.
quelle
Rob Farleys Blog-Beitrag könnte hilfreich sein:
Etwas wie:
quelle
Ich habe festgestellt, dass dies funktioniert und keine Verknüpfungen verwendet:
Stellen Sie einfach sicher, dass Spaltenname keine Klammern enthält, da die Abfrage nach einer genauen Übereinstimmung sucht und nichts zurückgibt, wenn es sich um [Spaltenname] handelt.
quelle
IF @ObjectName IS NOT NULL
vor dem EXEC-Befehl hinzu[default_object_id])
ist 0 . Ich bekomme den Wert NULL .So löschen Sie die Einschränkung für mehrere Spalten:
quelle
Erweiterte Lösung (berücksichtigt Tabellenschema):
quelle
Löschen Sie alle Standardbeschränkungen in einer Datenbank - sicher für den Schwellenwert von nvarchar (max).
quelle
Führen Sie diesen Befehl aus, um alle Einschränkungen zu durchsuchen:
Es wird ungefähr so aussehen :
DF__Mytable__Column__[ABC123]
. Dann können Sie einfach die Einschränkung löschen.quelle
exec sp_helpconstraint 'Roles2016.UsersCRM'
Ich hoffe das könnte hilfreich sein für wen hat ähnliches Problem.
ObjectExplorer
Wählen Sie im Fenster Ihre Datenbank => Tabellen, => Ihre Tabelle => Einschränkungen. Wenn der Kunde beim Erstellen der Spaltenzeit definiert ist, wird der Standardname der Einschränkung einschließlich des Spaltennamens angezeigt. dann benutze:(Der Einschränkungsname ist nur ein Beispiel.)
quelle
Die folgende Lösung löscht eine bestimmte Standardeinschränkung einer Spalte aus der Tabelle
quelle
Ich hatte einige Spalten mit mehreren Standardeinschränkungen erstellt, daher erstelle ich die folgende gespeicherte Prozedur:
quelle
Nützlich für einige Spalten, für die mehrere
default constraints or check constraints
erstellt wurden:Geändertes Skript https://stackoverflow.com/a/16359095/206730
quelle
Generieren Sie immer ein Skript und überprüfen Sie es, bevor Sie es ausführen. Unter dem Skript
quelle
quelle
Schau mal.
quelle