Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Use ALTER TABLE para especificar as propriedades de uma restrição PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK ou DEFAULT definição que adiciona a uma tabela usando ALTER TABLE (Transact-SQL).
Convenções sintáticas Transact-SQL
Syntax
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
(column [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
[ WITH ( <index_option>[ , ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ... )
| filegroup | "default" } ]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CONNECTION
( { node_table TO node_table }
[ , {node_table TO node_table }]
[ , ...n ]
)
[ ON DELETE { NO ACTION | CASCADE } ]
| DEFAULT constant_expression FOR column [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Arguments
CONSTRAINT
Especifica o início de uma definição para um PRIMARY KEY, UNIQUE, FOREIGN KEY, ou CHECK restrição, ou um DEFAULT.
nome_da_restrição
O nome da restrição. Os nomes das restrições devem seguir as regras dos identificadores, exceto que o nome não pode começar com um sinal numérico (#). Se não fornecer constraint_name, o sistema atribui um nome gerado à restrição.
CHAVE PRIMÁRIA
Uma restrição que impõe a integridade da entidade para uma coluna ou colunas especificadas usando um índice único. Só podes criar uma PRIMARY KEY restrição para cada tabela.
UNIQUE
Uma restrição que fornece integridade de entidade para uma coluna ou colunas especificadas usando um índice único.
AGRUPADOS | NÃO AGRUPADO
Especifica que um índice clusterizado ou não clusterizado é criado para a PRIMARY KEY restrição ou UNIQUE .
PRIMARY KEY restrições por defeito para CLUSTERED.
UNIQUE restrições por defeito para NONCLUSTERED.
Se já existir uma restrição ou índice clusterizado numa tabela, não pode especificar CLUSTERED. Se já existir uma restrição ou índice agrupado numa tabela, PRIMARY KEY as restrições são padrão para NONCLUSTERED.
Não podes especificar colunas que sejam dos tipos de dados ntext, text, varchar(max),nvarchar(max), varbinary(max),xml ou imagem como colunas para um índice.
coluna
Uma coluna ou lista de colunas especificadas entre parênteses que usas numa nova restrição.
[ ASC | DESC ]
Especifica a ordem na qual a coluna ou colunas que participam das restrições de tabela são classificadas. O padrão é ordem de ordenação crescente (ASC).
COM FILLFACTOR = fillfactor
Especifica quão completo o Database Engine deve tornar cada página de índice usada para armazenar os dados do índice. Os valores de de fator de preenchimento especificados pelo usuário podem ser de 1 a 100. Se você não especificar um valor, o padrão será 0.
Para compatibilidade retroativa, esta documentação inclui WITH FILLFACTOR = <fillfactor> como única opção de índice que se aplica a PRIMARY KEY restrições de OR UNIQUE . Esta sintaxe não será documentada em futuras versões. Pode especificar outras opções de índice na cláusula index_option de ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores.
Especifica o local de armazenamento do índice criado para a restrição. Se especificar partition_scheme_name, o índice é particionado e as partições são mapeadas para os grupos de ficheiros que partition_scheme_name especifica. Se especificar o grupo de ficheiros, o índice é criado no grupo de ficheiros nomeado. Se especificar "default" ou se não especificar ON de todo, o índice é criado no mesmo grupo de ficheiros que a tabela. Se especificar ON quando adiciona um índice agrupado para uma PRIMARY KEY restrição de um or UNIQUE , toda a tabela é movida para o grupo de ficheiros especificado quando o índice agrupado é criado.
Neste contexto, padrão não é uma palavra-chave; É um identificador para o grupo de ficheiros predefinido e deve ser delimitado, como em ON"default" ou ON[default]. Se especificar "default", a QUOTED_IDENTIFIER opção deve ser ON para a sessão atual. Esta é a configuração padrão.
REFERÊNCIAS CHAVE ESTRANGEIRAS
Uma restrição que fornece integridade referencial para os dados na coluna.
FOREIGN KEY as restrições exigem que cada valor na coluna exista na coluna especificada na tabela referenciada.
referenced_table_name
A tabela referenciada pela FOREIGN KEY restrição.
ref_column
Uma coluna ou lista de colunas entre parênteses referenciadas pela nova FOREIGN KEY restrição.
EM EXCLUIR { NENHUMA AÇÃO | CASCATA | DEFINIR NULO | DEFINIR PADRÃO }
Especifica que ação acontece nas linhas da tabela que alteras, se essas linhas tiverem uma relação referencial e apagares a linha referenciada da tabela principal. A predefinição é NO ACTION.
SEM AÇÃO
O Mecanismo de Banco de Dados do SQL Server gera um erro e reverte a ação de eliminar na linha da tabela principal.
CASCADE
Apaga as linhas correspondentes da tabela de referência se apagares essa linha da tabela pai.
SET NULL
Define todos os valores que compõem a chave estrangeira quando NULL eliminas a linha correspondente na tabela pai. Para que esta restrição seja executada, as colunas de chave estrangeira devem ser nulas.
DEFINIR PADRÃO
Define todos os valores que compõem a chave estrangeira para os seus valores predefinidos quando eliminas a linha correspondente na tabela pai. Para que essa restrição seja executada, todas as colunas de chave estrangeira devem ter definições padrão. Se uma coluna for anulável e não houver um conjunto explícito de valores por defeito, NULL torna-se o valor implícito por defeito da coluna.
Não especifique CASCADE se a tabela está incluída numa publicação de fusão que utilize registos lógicos. Para obter mais informações sobre registros lógicos, consulte Alterações de grupo em linhas relacionadas com registros lógicos.
Não podes definir ON DELETE CASCADE se já existe um INSTEAD OF gatilho ON DELETE na tabela que estás a alterar.
Por exemplo, no banco de dados AdventureWorks2025, a tabela ProductVendor tem uma relação referencial com a tabela Vendor. A chave estrangeira ProductVendor.VendorID faz referência à chave primária Vendor.VendorID.
Se executar uma instrução DELETE numa linha da tabela Vendor e especificar uma ação ON DELETE CASCADE para ProductVendor.VendorID, o Database Engine verifica uma ou mais linhas dependentes na tabela ProductVendor. Se existirem, as linhas dependentes da ProductVendor tabela são eliminadas, além da linha referenciada na Vendor tabela.
Por outro lado, se especificar NO ACTION, o Database Engine gera um erro e reverte a ação de apagar na linha Vendor quando há pelo menos uma linha na tabela ProductVendor que a referencia.
ON UPDATE { NENHUMA AÇÃO | CASCATA | DEFINIR NULO | DEFINIR PADRÃO }
Especifica que ação acontece nas linhas da tabela que alteras quando essas linhas têm uma relação referencial e atualizas a linha referenciada na tabela principal. A predefinição é NO ACTION.
SEM AÇÃO
O Database Engine gera um erro, e a ação de atualização na linha da tabela pai é revertida.
CASCADE
As linhas correspondentes são atualizadas na tabela de referência quando essa linha é atualizada na tabela pai.
SET NULL
Define todos os valores que compõem a chave estrangeira para NULL quando atualizas a linha correspondente na tabela pai. Para que esta restrição seja executada, as colunas de chave estrangeira devem ser nulas.
DEFINIR PADRÃO
Todos os valores que compõem a chave estrangeira são definidos como seus valores padrão quando a linha correspondente na tabela pai é atualizada. Para que essa restrição seja executada, todas as colunas de chave estrangeira devem ter definições padrão. Se uma coluna for anulável e não houver um conjunto de valores explícito por defeito, NULL torna-se o valor implícito por defeito da coluna.
Não especifique CASCADE se a tabela está incluída numa publicação de fusão que utilize registos lógicos. Para obter mais informações sobre registros lógicos, consulte Alterações de grupo em linhas relacionadas com registros lógicos.
ON UPDATE CASCADE, SET NULL, ou SET DEFAULT não pode ser definido se já existir um INSTEAD OF gatilho ON UPDATE na tabela que está a ser alterado.
Por exemplo, no banco de dados AdventureWorks2025, a tabela ProductVendor tem uma relação referencial com a tabela Vendor. A chave estrangeira ProductVendor.VendorID faz referência à chave primária Vendor.VendorID.
Se executar uma instrução UPDATE numa linha da tabela Vendor e especificar uma ação ON UPDATE CASCADE para ProductVendor.VendorID, o Database Engine verifica uma ou mais linhas dependentes na tabela ProductVendor. Se existirem, a linha dependente na ProductVendor tabela é atualizada, assim como a linha referenciada na Vendor tabela.
Por outro lado, se especificar NO ACTION, o Database Engine gera um erro e reverte a ação de atualização na linha Vendor quando há pelo menos uma linha na tabela ProductVendor que a referencia.
NÃO SE DESTINA À REPLICAÇÃO
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores.
Se especificar esta cláusula para uma restrição, os agentes de replicação não aplicam essa restrição quando realizam operações de escrita. Pode especificar esta cláusula para FOREIGN KEY restrições e CHECK restrições.
LIGAÇÃO
Especifica o par de tabelas de nós que a restrição de aresta dada pode conectar.
ON DELETE especifica o que acontece às linhas na tabela de arestas quando os nós que a aresta liga são eliminados.
DEFAULT
Especifica o valor padrão para a coluna. Use DEFAULT definições para fornecer valores para uma nova coluna nas linhas de dados existentes. Não podes adicionar DEFAULT definições a colunas que tenham um tipo de dado com carimbo temporal , uma IDENTITY propriedade, uma definição existente DEFAULT ou um padrão limitado. Se a coluna tiver um padrão existente, tens de eliminar o padrão antes de poderes adicionar um novo. Se especificar um valor padrão para uma coluna de tipo definida pelo utilizador, o tipo deve suportar uma conversão implícita de constant_expression para o tipo definido pelo utilizador. Para manter a compatibilidade com versões anteriores de SQL Server, pode atribuir um nome de restrição a um DEFAULT.
constant_expression
Um valor literal, um NULL, ou uma função do sistema que usas como valor padrão da coluna. Se usar constant_expression em conjunto com uma coluna definida como sendo do tipo definido pelo utilizador do Microsoft .NET Framework, a implementação do tipo deve suportar uma conversão implícita do tipo constant_expression para o tipo definido pelo utilizador.
Coluna FOR
Especifica a coluna associada a uma definição ao nível DEFAULT da tabela.
COM VALORES
Quando adicionas uma coluna e uma
DEFAULTrestrição, se a coluna permitir nulos, usarWITH VALUESdefine o valor da nova coluna para linhas existentes no valor indicado emDEFAULTconstant_expression.Se a coluna que estás a adicionar não permitir nulos, o valor da coluna para linhas existentes é sempre definido para o valor dado na
DEFAULTexpressão constante.
Em versões SQL Server 2012 e posteriores, esta operação pode ser uma operação de metadados adição-não-colunas-nulas-as-an-operação-online.
Se usar WITH VALUES quando a coluna relacionada não está a ser adicionada, não tem efeito.
CHECK
Uma restrição que impõe a integridade do domínio limitando os valores possíveis que podem ser inseridos em uma coluna ou colunas.
logical_expression
Uma expressão lógica usada numa CHECK restrição que retorna TRUE ou FALSE.
logical_expression usado com CHECK restrições não pode referenciar outra tabela, mas pode referenciar outras colunas na mesma tabela para a mesma linha. A expressão não pode referenciar um tipo de dado de alias.
Remarks
Quando adiciona FOREIGN KEY restrições, CHECK o sistema verifica todos os dados existentes para violações de restrições, a menos que especifique a WITH NOCHECK opção. Se ocorrerem violações, ALTER TABLE falha e devolve um erro. Quando adiciona uma nova PRIMARY KEY ou UNIQUE restrição a uma coluna existente, os dados na coluna ou colunas devem ser únicos. Se forem encontrados valores duplicados, ALTER TABLE falha. A WITH NOCHECK opção não tem efeito quando adicionas PRIMARY KEY restrições UNIQUE .
Cada PRIMARY KEY restrição e UNIQUE gera um índice. O número de UNIQUE restrições e PRIMARY KEY não pode fazer com que o número de índices na tabela ultrapasse 999 índices não agrupados e 1 índice agrupado. As restrições de chave estrangeira não geram automaticamente um índice. No entanto, frequentemente utiliza-se colunas de chave estrangeira nos critérios de junção em consultas, ao corresponder a coluna ou colunas na restrição de chave estrangeira de uma tabela com a coluna ou colunas de chave primária ou única na outra tabela. Um índice nas colunas de chave estrangeira permite ao Database Engine encontrar rapidamente dados relacionados na tabela de chaves estrangeiras.
No SQL Server 2022 (16.x) e versões posteriores, operações retomáveis suportam a adição de restrições de tabela para restrições de chave primária e chave única. Para obter mais informações sobre como habilitar e usar operações retomáveis ALTER TABLE ADD CONSTRAINT , consulte Resumable add table constraints.
Warehouse em Microsoft Fabric suporta restrições de coluna ADD ou DROPPRIMARY KEY, UNIQUE e FOREIGN_KEY, mas apenas se especificar a opção NOT ENFORCED. Warehouse em Microsoft Fabric bloqueia todas as outras operações ALTER TABLE.
Examples
Para exemplos, veja ALTER TABELA (Transact-SQL).