Soweit ich weiß, sind Standardwertbeschränkungen nicht Teil des ISO-Standards, daher werden sie nicht in INFORMATION_SCHEMA angezeigt. INFORMATION_SCHEMA scheint die beste Wahl für diese Art von Aufgabe zu sein, da sie plattformübergreifend ist. Wenn die Informationen jedoch nicht verfügbar sind, sollten Sie die Objektkatalogansichten (sys. *) Anstelle von Systemtabellenansichten verwenden, die in SQL Server veraltet sind 2005 und später.
Unten ist so ziemlich das Gleiche wie die Antwort von @ user186476. Es gibt den Namen der Standardwertbeschränkung für eine bestimmte Spalte zurück. (Für Nicht-SQL Server-Benutzer benötigen Sie den Namen des Standards, um ihn zu löschen. Wenn Sie die Standardeinschränkung nicht selbst benennen, erstellt SQL Server einen verrückten Namen wie "DF_TableN_Colum_95AFE4B5". Um das Ändern zu vereinfachen Ihr Schema in der Zukunft, benennen Sie Ihre Einschränkungen immer explizit!)
-- returns name of a column's default value constraint
SELECT
default_constraints.name
FROM
sys.all_columns
INNER JOIN
sys.tables
ON all_columns.object_id = tables.object_id
INNER JOIN
sys.schemas
ON tables.schema_id = schemas.schema_id
INNER JOIN
sys.default_constraints
ON all_columns.default_object_id = default_constraints.object_id
WHERE
schemas.name = 'dbo'
AND tables.name = 'tablename'
AND all_columns.name = 'columnname'
sys
Tabellen enthält und leicht zu merken ist.Sie können Folgendes verwenden, um die Ergebnisse noch weiter einzugrenzen, indem Sie den Tabellennamen und den Spaltennamen angeben, mit denen die Standardbeschränkung korreliert:
quelle
Es scheint keine Standardbeschränkungsnamen in den
Information_Schema
Ansichten zu geben.Verwenden Sie
SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name
diese Option, um eine Standardeinschränkung nach Namen zu suchenquelle
Das folgende Skript listet alle Standardeinschränkungen und Standardwerte für die Benutzertabellen in der Datenbank auf, in der sie ausgeführt werden:
quelle
Wenn Sie eine Einschränkung durch die Spalten- oder Tabellennamen erhalten möchten oder alle Einschränkungen in der Datenbank erhalten möchten, suchen Sie nach anderen Antworten. Wenn Sie jedoch nur genau das suchen, was die Frage verlangt, nämlich "zu testen, ob eine bestimmte Standardeinschränkung existiert ... anhand des Namens der Einschränkung". , gibt es einen viel einfacheren Weg.
Hier ist eine zukunftssichere Antwort, die die
sysobjects
oder anderesys
Tabellen überhaupt nicht verwendet :quelle
quelle
Ist die Spalte COLUMN_DEFAULT von INFORMATION_SCHEMA.COLUMNS das, wonach Sie suchen?
quelle
quelle
Nekromantie.
Wenn Sie nur überprüfen müssen, ob eine Standardeinschränkung vorhanden ist
(Standardeinschränkungen haben in schlecht verwalteten
DBs möglicherweise einen anderen Namen), verwenden Sie INFORMATION_SCHEMA.COLUMNS (column_default):
Wenn Sie nur anhand des Einschränkungsnamens überprüfen möchten:
Und zu guter Letzt können Sie einfach eine Ansicht mit dem Namen
INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS erstellen :
quelle
Ich glaube nicht, dass es in INFORMATION_SCHEMA enthalten ist - Sie müssen wahrscheinlich Sysobjects oder verwandte veraltete Tabellen / Ansichten verwenden.
Sie würden denken, dass es in INFORMATION_SCHEMA.TABLE_CONSTRAINTS einen Typ dafür geben würde, aber ich sehe keinen.
quelle
Wahrscheinlich, weil in einigen anderen SQL-DBMS die "Standardeinschränkung" nicht wirklich eine Einschränkung ist, finden Sie ihren Namen nicht in "INFORMATION_SCHEMA.TABLE_CONSTRAINTS". Ihre beste Wahl ist also "INFORMATION_SCHEMA.COLUMNS", wie andere bereits erwähnt haben.
(SQLServer-ignoramus hier)
Der einzige Grund, an den ich denken kann, wenn Sie den Namen der "Standardeinschränkung" kennen müssen, ist, wenn SQLServer keinen
"ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..."
Befehl unterstützt. Aber dann befinden Sie sich bereits in einer nicht standardmäßigen Zone und müssen die produktspezifischen Methoden verwenden, um das zu erhalten, was Sie benötigen.quelle
Wie wäre es mit einer Kombination aus CHECK_CONSTRAINTS und CONSTRAINT_COLUMN_USAGE:
quelle
Ich verwende das folgende Skript, um alle Standardeinstellungen (sp_binddefaults) und alle Standardeinschränkungen mit folgenden Skripten abzurufen:
quelle
Objektkatalog anzeigen : sys.default_constraints
Die Informationsschemaansichten
INFORMATION_SCHEMA
sind ANSI-kompatibel, aber die Standardeinschränkungen sind nicht Teil des ISO-Standards. Microsoft SQL Server bietet Systemkatalogansichten zum Abrufen von Informationen zu SQL Server-Objektmetadaten.sys.default_constraints
Systemkatalogansicht zum Abrufen von Informationen zu Standardeinschränkungen.quelle