Problem:
Du ønsker at finde navnene på begrænsningerne i en tabel i SQL Server.
Eksempel:
Vi ønsker at vise navnene på begrænsningerne i tabellen student
.
Løsning:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Her er resultatet:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
elev | PRIMÆR NØGLE | PK__student__3213E83F357C7D1D |
elev | UNIKK | UQ__student__24E2EDD2AC2A7D87 |
elev | TJEK | CK__student__age__4E88ABD4 |
elev | UDLANDS NØGLE | FK__student__country__4F7CD00D |
Diskussion:
Brug visningen table_constraints
i information_schema
skema. Kolonnen table_name
giver dig navnet på den tabel, hvori begrænsningen er defineret, og kolonnen constraint_name
indeholder navnet på begrænsningen. Kolonnen constraint_type
angiver typen af begrænsning:PRIMARY KEY
for den primære nøgletype, FOREIGN KEY
for fremmednøgletypen UNIQUE
for de unikke værdier og CHECK
for begrænsningskontrollen.
For eksempel den primære nøgle i student
tabellen har begrænsningsnavnet PK_student_3213E83F357C7D1D
. constraint_type
kolonne giver dig information om typen af hver begrænsning; for den primære nøgle er det PRIMARY KEY
. table_name
kolonne i denne visning angiver, hvilken tabel der indeholder denne begrænsning.
Men hvis du vil vælge DEFAULT
begrænsning fra en database, brug denne forespørgsel nedenfor.
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';
Her er resultatet:
navn | definition |
---|---|
DF__student__name__4D94879B | ("ukendt") |
Navnet på DEFAULT
begrænsning er gemt i kolonnenavnet, men værdien er i kolonnen definition
. Deltager i visningerne sys.default_constraint
s og sys.objects
giver os mulighed for kun at vælge data for en given tabel (i vores eksempel tabellen student
) med brug af WHERE-sætning. Begrænsningsnavnet indeholder navnet på tabellen (student
) og navnet på kolonnen (name
).