Проблем:
Искате да намерите имената на ограниченията в таблица в SQL Server.
Пример:
Искаме да покажем имената на ограниченията в таблицата student
.
Решение:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Ето резултата:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
ученик | ПЪРВИЧЕН КЛЮЧ | PK__student__3213E83F357C7D1D |
ученик | УНИКАЛНО | UQ__student__24E2EDD2AC2A7D87 |
ученик | ПРОВЕРКА | CK__student__age__4E88ABD4 |
ученик | ВЪНШЕН КЛЮЧ | FK__student__country__4F7CD00D |
Дискусия:
Използвайте изгледа table_constraints
в information_schema
схема. Колоната table_name
ви дава името на таблицата, в която е дефинирано ограничението, и колоната constraint_name
съдържа името на ограничението. Колоната constraint_type
указва типа на ограничението:PRIMARY KEY
за тип първичен ключ, FOREIGN KEY
за типа външен ключ, UNIQUE
за уникалните стойности и CHECK
за проверка на ограничението.
Например първичният ключ в student
таблицата има име на ограничение PK_student_3213E83F357C7D1D
. constraint_type
колоната ви дава информация за типа на всяко ограничение; за първичния ключ това е PRIMARY KEY
. table_name
колоната в този изглед показва коя таблица съдържа това ограничение.
Въпреки това, ако искате да изберете DEFAULT
ограничение от база данни, използвайте тази заявка по-долу.
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';
Ето резултата:
name | определение |
---|---|
DF__student__name__4D94879B | ("неизвестно") |
Името на DEFAULT
ограничението се съхранява в името на колоната, но стойността е в колоната definition
. Присъединяване на изгледите sys.default_constraint
s и sys.objects
ни позволява да изберем само данните за дадена таблица (в нашия пример таблицата student
) с използване на клауза WHERE. Името на ограничението съдържа името на таблицата (student
) и името на колоната (name
).