Problema:
Você deseja saber os nomes padrão das restrições no banco de dados do SQL Server.
Exemplo:
Em nosso banco de dados, criamos duas tabelas,
country e student , com as seguintes restrições:PRIMARY KEY (a coluna id nas tabelas country e student ), FOREIGN KEY (a coluna country_id na tabela student ), DEFAULT (a coluna name na tabela student ), UNIQUE (a coluna name na tabela country e a coluna personal_number na tabela student ) e CHECK (a coluna age na tabela student ). Solução:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int FOREIGN KEY references country(id) );
Vamos mostrar como o SQL Server nomeia as restrições dessas tabelas por padrão. Use esta consulta para vê-los:
SELECT TABLE_CATALOG, TABLE_NAME,
CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Aqui está o resultado:
| TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
|---|---|---|
| país | CHAVE PRIMÁRIA | PK__country__3213E83F7EFD826D |
| país | ÚNICO | UQ__country__72E12F1BB69A1D8C |
| 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:
Quando criamos nossas tabelas, definimos restrições para algumas colunas. No entanto, não especificamos os nomes para essas restrições, portanto, elas são nomeadas por padrão. Como os nomes padrão para restrições são gerados?
No SQL Server, os nomes de restrição padrão começam com prefixos específicos:
PK , UQ , CK , ou FK . O nome padrão para uma
PRIMARY KEY restrição começa com 'PK ’, seguido por sublinhados (‘__ ’), o nome da tabela, mais sublinhados (‘__ ’) e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, PK__country__3213E83F7EFD826D é o nome padrão para a restrição de chave primária na tabela country e PK__student__3213E83F357C7D1D é o nome padrão para a restrição de chave primária na tabela student . O nome padrão para uma
FOREIGN KEY restrição começa com 'FK ’, seguido por sublinhados (‘__ ’), o nome da tabela, mais sublinhados (‘__ ’), o nome da tabela relacionada e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, FK__student__country__4F7CD00D é o nome padrão para a restrição de chave estrangeira na tabela student que é equivalente à coluna id na tabela country . O nome padrão para um
UNIQUE restrição é 'UQ ’, sublinhado (‘__ ’), o nome da tabela, mais sublinhados (‘__ ’) e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, UQ__country__72E12F1BB69A1D8C é o nome padrão da restrição exclusiva para o nome da coluna na tabela country e UQ__student__24E2EDD2AC2A7D87 do UNIQUE restrição para o nome da coluna da tabela student . UNIQUE restrições com várias colunas são nomeadas em um padrão semelhante. O nome padrão para um
CHECK restrição é 'CK ’, sublinhado (‘__ ’), o nome da tabela, mais sublinhados (‘__ ’), o nome da coluna, mais sublinhados (‘__’) e um número de sequência hexadecimal gerado pelo SQL Server. Em nosso exemplo, CK__student__age__4E88ABD4 é o nome padrão para o CHECK restrição para a coluna age da tabela student .