Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Applies to:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Warehouse no Microsoft Fabric banco de dados
SQL no Microsoft Fabric
Use ALTER TABLE para especificar as propriedades de um PRIMARY KEY, UNIQUE, FOREIGN KEY, restrição CHECK ou DEFAULT que você adiciona a uma tabela usando ALTER TABLE (Transact-SQL).
Transact-SQL convenções de sintaxe
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 KEYou CHECK restrição ou um DEFAULT.
nome_da_restrição
O nome da restrição. Os nomes de restrição devem seguir as regras para identificadores, exceto que o nome não pode começar com um sinal de número (#). Se você não fornecer constraint_name, o sistema atribuirá um nome gerado à restrição.
CHAVE PRIMÁRIA
Uma restrição que impõe a integridade da entidade para uma coluna ou coluna especificada usando um índice exclusivo. Você pode criar apenas uma PRIMARY KEY restrição para cada tabela.
UNIQUE
Uma restrição que fornece integridade de entidade para uma coluna ou coluna especificada usando um índice exclusivo.
CLUSTERIZADO | NÃO CLUSTERIZADO
Especifica que um índice clusterizado ou não clusterizado é criado para a restrição ou UNIQUE a PRIMARY KEY restrição.
PRIMARY KEY restrições padrão para CLUSTERED.
UNIQUE restrições padrão para NONCLUSTERED.
Se uma restrição ou índice clusterizado já existir em uma tabela, você não poderá especificar CLUSTERED. Se uma restrição ou índice clusterizado já existir em uma tabela, PRIMARY KEY as restrições padrão para NONCLUSTERED.
Você não pode especificar colunas dos tipos de dados ntext, text, varchar(max), nvarchar(max), varbinary(max), xml ou image como colunas para um índice.
column
Uma coluna ou lista de colunas especificadas entre parênteses que você usa em uma nova restrição.
[ ASC | DESC ]
Especifica a ordem na qual a coluna ou colunas que participam de restrições de tabela são classificadas. O padrão é a ordem de classificação crescente (ASC).
COM FILLFACTOR = FOR PREENCHIMENTO
Especifica o quão completo o Mecanismo de Banco de Dados deve tornar cada página de índice usada para armazenar os dados de índice. Os valores de fillfactor especificados pelo usuário podem ser de 1 a 100. Se você não especificar um valor, o padrão será 0.
Para compatibilidade com versões anteriores, essa documentação inclui WITH FILLFACTOR = <fillfactor> como a única opção de índice que se aplica a PRIMARY KEY ou UNIQUE restrições. Essa sintaxe não será documentada em versões futuras. Você pode especificar outras opções de índice na cláusula index_option de ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | grupo de arquivos| "default" }
Applies to: SQL Server 2008 (10.0.x) e versões posteriores.
Especifica o local de armazenamento do índice criado para a restrição. Se você especificar partition_scheme_name, o índice será particionado e as partições serão mapeadas para os grupos de arquivos que partition_scheme_name especificar. Se você especificar o grupo de arquivos, o índice será criado no grupo de arquivos nomeado. Se você especificar "padrão" ou se não especificar ON , o índice será criado no mesmo grupo de arquivos que a tabela. Se você especificar ON quando adicionar um índice clusterizado para uma PRIMARY KEY ou UNIQUE restrição, toda a tabela será movida para o grupo de arquivos especificado quando o índice clusterizado for criado.
Nesse contexto, o padrão não é uma palavra-chave; é um identificador para o grupo de arquivos padrão e deve ser delimitado, como em ON"padrão" ou ON[padrão]. Se você especificar "padrão", a opção QUOTED_IDENTIFIER deverá ser ON para a sessão atual. Essa é a configuração padrão.
REFERÊNCIAS DE CHAVE ESTRANGEIRA
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 restrição FOREIGN KEY .
ref_column
Uma coluna ou lista de colunas entre parênteses referenciadas pela nova FOREIGN KEY restrição.
AO EXCLUIR { NENHUMA AÇÃO | CASCADE | SET NULL | DEFINIR PADRÃO }
Especifica qual ação acontece com as linhas na tabela que você altera, se essas linhas tiverem uma relação referencial e você excluir a linha referenciada da tabela pai. O padrão é NO ACTION.
NENHUMA AÇÃO
O Mecanismo de Banco de Dados do SQL Server gera um erro e reverte a ação de exclusão na linha da tabela pai.
CASCADE
Exclui as linhas correspondentes da tabela de referência se você excluir essa linha da tabela pai.
DEFINIR COMO NULO
Define todos os valores que compõem a chave estrangeira quando NULL você exclui a linha correspondente na tabela pai. Para que essa restrição seja executada, as colunas de chave estrangeira devem ser anuláveis.
DEFINIR PADRÃO
Define todos os valores que compõem a chave estrangeira para seus valores padrão quando você exclui 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 de valores padrão explícito, NULL torna-se o valor padrão implícito da coluna.
Não especifique CASCADE se a tabela está incluída em uma publicação de mesclagem que usa registros lógicos. Para obter mais informações sobre registros lógicos, consulte Agrupar alterações em linhas relacionadas com registros lógicos.
Você não pode definir ON DELETE CASCADE se já existe um INSTEAD OF gatilho ON DELETE na tabela que você está alterando.
Por exemplo, no banco de dados AdventureWorks2025, a tabela ProductVendor tem uma relação referencial com a tabela Vendor. A chave estrangeira ProductVendor.VendorID referencia a chave primária Vendor.VendorID.
Se você executar uma instrução DELETE em uma linha na tabela Vendor e especificar uma ação ON DELETE CASCADE para ProductVendor.VendorID, o Mecanismo de Banco de Dados verificará uma ou mais linhas dependentes na tabela ProductVendor. Se houver alguma, as linhas dependentes na ProductVendor tabela serão excluídas, além da linha referenciada na Vendor tabela.
Por outro lado, se você especificar NO ACTION, o Mecanismo de Banco de Dados gerará um erro e reverterá a ação de exclusão na linha Vendor quando houver pelo menos uma linha na tabela ProductVendor que a referencia.
NA ATUALIZAÇÃO { NENHUMA AÇÃO | CASCADE | SET NULL | DEFINIR PADRÃO }
Especifica qual ação acontece com as linhas na tabela que você altera quando essas linhas têm uma relação referencial e você atualiza a linha referenciada na tabela pai. O padrão é NO ACTION.
NENHUMA AÇÃO
O Mecanismo de Banco de Dados gera um erro e a ação de atualização na linha na tabela pai é revertida.
CASCADE
As linhas correspondentes são atualizadas na tabela de referência quando aquela linha é atualizada na tabela pai.
DEFINIR COMO NULO
Define todos os valores que compõem a chave estrangeira quando NULL você atualiza a linha correspondente na tabela pai. Para que essa restrição seja executada, as colunas de chave estrangeira devem ser anuláveis.
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 padrão explícito, NULL torna-se o valor padrão implícito da coluna.
Não especifique CASCADE se a tabela está incluída em uma publicação de mesclagem que usa registros lógicos. Para obter mais informações sobre registros lógicos, consulte Agrupar alterações em linhas relacionadas com registros lógicos.
ON UPDATE CASCADE, SET NULLou SET DEFAULT não pode ser definido se já existe um INSTEAD OF gatilho ON UPDATE na tabela que está sendo alterada.
Por exemplo, no banco de dados AdventureWorks2025, a tabela ProductVendor tem uma relação referencial com a tabela Vendor. A chave estrangeira ProductVendor.VendorID referencia a chave primária Vendor.VendorID.
Se você executar uma instrução UPDATE em uma linha na tabela Vendor e especificar uma ação ON UPDATE CASCADE para ProductVendor.VendorID, o Mecanismo de Banco de Dados verificará uma ou mais linhas dependentes na tabela ProductVendor. Se houver alguma, a linha dependente na ProductVendor tabela será atualizada, bem como a linha referenciada na Vendor tabela.
Por outro lado, se você especificar NO ACTION, o Mecanismo de Banco de Dados gerará um erro e reverterá a ação de atualização na linha Vendor quando houver pelo menos uma linha na tabela ProductVendor que faz referência a ela.
NÃO PARA REPLICAÇÃO
Applies to: SQL Server 2008 (10.0.x) e versões posteriores.
Se você especificar essa cláusula para uma restrição, os agentes de replicação não imporão a restrição ao executar operações de gravação. Você pode especificar essa cláusula para FOREIGN KEY restrições e CHECK restrições.
CONNECTION
Especifica o par de tabelas de nós que a restrição de borda fornecida tem permissão para se conectar.
ON DELETE especifica o que acontece com as linhas na tabela de borda quando os nós que a borda se conecta são excluídos.
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. Você não pode adicionar DEFAULT definições a colunas que têm um tipo de dados de carimbo de data/hora , uma IDENTITY propriedade, uma definição existente DEFAULT ou um padrão associado. Se a coluna tiver um padrão existente, você deverá remover o padrão antes de adicionar um novo padrão. Se você especificar um valor padrão para uma coluna de tipo definida pelo usuário, o tipo deverá dar suporte a uma conversão implícita de constant_expression para o tipo definido pelo usuário. Para manter a compatibilidade com versões anteriores do SQL Server, você pode atribuir um nome de restrição a um DEFAULT.
Constant_expression
Um valor literal, uma função de sistema ou um NULLsistema que você usa como o valor de coluna padrão. Se você usar constant_expression em conjunto com uma coluna definida como de um tipo definido pelo usuário do Microsoft .NET Framework, a implementação do tipo deverá dar suporte a uma conversão implícita do constant_expression para o tipo definido pelo usuário.
Coluna FOR
Especifica a coluna associada a uma definição de nível DEFAULT de tabela.
COM VALORES
Quando você adiciona uma coluna e uma
DEFAULTrestrição, se a coluna permite nulos, o usoWITH VALUESdefine o valor da nova coluna para linhas existentes para o valor fornecido emDEFAULTconstant_expression.Se a coluna que você está adicionando não permitir nulos, o valor da coluna para linhas existentes sempre será definido como o valor fornecido na
DEFAULTexpressão constante.
Em SQL Server 2012 e versões posteriores, essa operação pode ser uma operação de metadados adding-not-null-columns-as-an-online-operation.
Se você usar WITH VALUES quando a coluna relacionada também não estiver sendo adicionada, ela não terá 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 em uma 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 dados de alias.
Remarks
Quando você adiciona FOREIGN KEY ou CHECK restrições, o sistema verifica todos os dados existentes em busca de violações de restrição, a menos que você especifique a opção WITH NOCHECK . Se ocorrerem violações, ALTER TABLE falhará e retornará um erro. Quando você adiciona uma nova PRIMARY KEY ou UNIQUE restrição a uma coluna existente, os dados na coluna ou colunas devem ser exclusivos. Se forem encontrados valores duplicados, ALTER TABLE falhará. A WITH NOCHECK opção não tem efeito quando você adiciona PRIMARY KEY ou UNIQUE faz restrições.
Cada PRIMARY KEY restrição gera UNIQUE um índice. O número e UNIQUEPRIMARY KEY as restrições não podem fazer com que o número de índices na tabela exceda 999 índices não clusterizados e 1 índice clusterizado. Restrições de chave estrangeira não geram automaticamente um índice. No entanto, você frequentemente usa colunas de chave estrangeira em critérios de junção em consultas, correspondendo à coluna ou colunas na restrição de chave estrangeira de uma tabela com a coluna ou coluna de chave primária ou exclusiva na outra tabela. Um índice nas colunas de chave estrangeira permite que o Mecanismo de Banco de Dados localize rapidamente os dados relacionados na tabela de chaves estrangeiras.
No SQL Server 2022 (16.x) e versões posteriores, as operações retomáveis dão suporte à adição de restrições de tabela para a chave primária e restrições de chave exclusivas. Para obter mais informações sobre como habilitar e usar operações retomáveis ALTER TABLE ADD CONSTRAINT, confira Adição retomável de restrições de tabela.
O Warehouse no Microsoft Fabric dá suporte a restrições de coluna ADD ou DROPPRIMARY KEY, UNIQUE e FOREIGN_KEY, mas somente se você especificar a opção NOT ENFORCED. O warehouse no Microsoft Fabric bloqueia todas as outras operações de ALTER TABLE.
Examples
Para obter exemplos, consulte ALTER TABLE (Transact-SQL).