Problem:
Du vill hitta namnen på begränsningarna i en tabell i SQL Server.
Exempel:
Vi vill visa namnen på begränsningarna i tabellen student
.
Lösning:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Här är resultatet:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
student | PRIMÄRNYCKEL | PK__student__3213E83F357C7D1D |
student | UNIKT | UQ__student__24E2EDD2AC2A7D87 |
student | KONTROLLERA | CK__student__age__4E88ABD4 |
student | UTLANDSNYCKEL | FK__student__country__4F7CD00D |
Diskussion:
Använd vyn table_constraints
i information_schema
schema. Kolumnen table_name
ger dig namnet på tabellen där begränsningen är definierad och kolumnen constraint_name
innehåller namnet på begränsningen. Kolumnen constraint_type
anger typen av begränsning:PRIMARY KEY
för primärnyckeltypen, FOREIGN KEY
för den främmande nyckeltypen, UNIQUE
för de unika värdena och CHECK
för begränsningskontrollen.
Till exempel den primära nyckeln i student
tabellen har begränsningsnamnet PK_student_3213E83F357C7D1D
. constraint_type
kolumnen ger dig information om typen av varje begränsning; för primärnyckeln är det PRIMARY KEY
. table_name
kolumnen i den här vyn anger vilken tabell som innehåller denna begränsning.
Men om du vill välja DEFAULT
begränsning från en databas, använd den här frågan nedan.
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';
Här är resultatet:
namn | definition |
---|---|
DF__student__name__4D94879B | ("okänt") |
Namnet på DEFAULT
begränsning lagras i kolumnnamnet, men värdet finns i kolumnen definition
. Gå med i vyerna sys.default_constraint
s och sys.objects
tillåter oss att endast välja data för en given tabell (i vårt exempel, tabellen student
) med hjälp av WHERE-satsen. Begränsningsnamnet innehåller namnet på tabellen (student
) och namnet på kolumnen (name
).