Problém:
Chcete najít názvy omezení v tabulce na serveru SQL.
Příklad:
Názvy omezení chceme zobrazit v tabulce student
.
Řešení:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Zde je výsledek:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
student | PRIMÁRNÍ KLÍČ | PK__student__3213E83F357C7D1D |
student | JEDINEČNÉ | UQ__student__24E2EDD2AC2A7D87 |
student | ZKONTROLUJTE | CK__student__age__4E88ABD4 |
student | CIZI KLÍČ | FK__student__country__4F7CD00D |
Diskuse:
Použijte zobrazení table_constraints
v information_schema
schéma. Sloupec table_name
vám dává název tabulky, ve které je omezení definováno, a sloupec constraint_name
obsahuje název omezení. Sloupec constraint_type
označuje typ omezení:PRIMARY KEY
pro typ primárního klíče FOREIGN KEY
pro typ cizího klíče UNIQUE
pro jedinečné hodnoty a CHECK
pro kontrolu omezení.
Například primární klíč v student
tabulka má název omezení PK_student_3213E83F357C7D1D
. constraint_type
sloupec poskytuje informace o typu každého omezení; pro primární klíč je to PRIMARY KEY
. table_name
sloupec v tomto zobrazení označuje, která tabulka obsahuje toto omezení.
Pokud však chcete vybrat DEFAULT
omezení z databáze, použijte tento dotaz níže.
SELECT c.name, c.definition FROM sys.default_constraints c JOIN sys.objects o ON o.object_id = c.parent_object_id WHERE o.name ='student';
Zde je výsledek:
name | definice |
---|---|
DF__student__name__4D94879B | ("neznámé") |
Název DEFAULT
omezení je uloženo v názvu sloupce, ale hodnota je ve sloupci definition
. Spojení pohledů sys.default_constraint
s a sys.objects
nám umožňuje vybrat pouze data pro danou tabulku (v našem příkladu tabulka student
) s použitím klauzule WHERE. Název omezení obsahuje název tabulky (student
) a název sloupce (name
).