Problema:
Você deseja localizar os nomes das restrições em uma tabela no SQL Server.
Exemplo:
Queremos exibir os nomes das restrições na tabela
student
. Solução:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Aqui está o resultado:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
aluno | CHAVE PRIMÁRIA | PK__student__3213E83F357C7D1D |
aluno | ÚNICO | UQ__student__24E2EDD2AC2A7D87 |
aluno | VERIFICAR | CK__student__age__4E88ABD4 |
aluno | CHAVE ESTRANGEIRA | FK__student__country__4F7CD00D |
Discussão:
Use a visualização
table_constraints
no information_schema
esquema. A coluna table_name
fornece o nome da tabela na qual a restrição é definida e a coluna constraint_name
contém o nome da restrição. A coluna constraint_type
indica o tipo de restrição:PRIMARY KEY
para o tipo de chave primária, FOREIGN KEY
para o tipo de chave estrangeira, UNIQUE
para os valores exclusivos e CHECK
para a verificação de restrição. Por exemplo, a chave primária no arquivo
student
tabela tem o nome de restrição PK_student_3213E83F357C7D1D
. O constraint_type
coluna fornece informações sobre o tipo de cada restrição; para a chave primária, é PRIMARY KEY
. O table_name
coluna nesta exibição indica qual tabela contém essa restrição. No entanto, se você quiser selecionar o
DEFAULT
restrição de um banco de dados, use esta consulta abaixo. 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';
Aqui está o resultado:
nome | definição |
---|---|
DF__student__name__4D94879B | ("desconhecido") |
O nome do
DEFAULT
restrição é armazenada no nome da coluna, mas o valor está na coluna definition
. Unindo as visualizações sys.default_constraint
se sys.objects
nos permite selecionar apenas os dados de uma determinada tabela (no nosso exemplo, a tabela student
) com o uso da cláusula WHERE. O nome da restrição contém o nome da tabela (student
) e o nome da coluna(name
).