Problem:
Chcesz znaleźć nazwy ograniczeń w tabeli w SQL Server.
Przykład:
Chcemy wyświetlić nazwy ograniczeń w tabeli student
.
Rozwiązanie:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Oto wynik:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
uczeń | KLUCZ PODSTAWOWY | PK__student__3213E83F357C7D1D |
uczeń | UNIKALNE | UQ__student__24E2EDD2AC2A7D87 |
uczeń | SPRAWDŹ | CK__student__wiek__4E88ABD4 |
uczeń | KLUCZ OBCY | FK__student__country__4F7CD00D |
Dyskusja:
Użyj widoku table_constraints
w information_schema
schemat. Kolumna table_name
podaje nazwę tabeli, w której zdefiniowane jest ograniczenie, a kolumna constraint_name
zawiera nazwę ograniczenia. Kolumna constraint_type
wskazuje typ ograniczenia:PRIMARY KEY
dla typu klucza podstawowego FOREIGN KEY
dla typu klucza obcego UNIQUE
dla unikalnych wartości i CHECK
do sprawdzenia ograniczeń.
Na przykład klucz podstawowy w student
tabela ma nazwę ograniczenia PK_student_3213E83F357C7D1D
. constraint_type
kolumna zawiera informacje o typie każdego ograniczenia; dla klucza podstawowego jest to PRIMARY KEY
. table_name
kolumna w tym widoku wskazuje, która tabela zawiera to ograniczenie.
Jeśli jednak chcesz wybrać DEFAULT
ograniczenie z bazy danych, użyj poniższego zapytania.
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';
Oto wynik:
nazwa | definicja |
---|---|
DF__student__name__4D94879B | ("nieznane") |
Nazwa DEFAULT
ograniczenie jest przechowywane w nazwie kolumny, ale wartość znajduje się w kolumnie definition
. Dołączanie do widoków sys.default_constraint
s i sys.objects
pozwala nam wybrać tylko dane dla danej tabeli (w naszym przykładzie tabela student
) z użyciem klauzuli WHERE. Nazwa ograniczenia zawiera nazwę tabeli (student
) i nazwę kolumny (name
).