Partilhar via


TABELA ALTER table_constraint (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

Especifica as propriedades de uma CHAVE PRIMÁRIA, EXCLUSIVA, CHAVE ESTRANGEIRA, uma restrição CHECK ou uma definição DEFAULT adicionada a uma tabela usando ALTER TABLE.

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 uma restrição de CHAVE PRIMÁRIA, EXCLUSIVA, CHAVE ESTRANGEIRA ou CHECK ou DEFAULT.

constraint_name
É 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 numérico (#). Se constraint_name não for fornecido, um nome gerado pelo sistema será atribuído à restrição.

CHAVE PRIMÁRIA
É uma restrição que impõe a integridade da entidade para uma coluna ou colunas especificadas usando um índice exclusivo. Apenas uma restrição de CHAVE PRIMÁRIA pode ser criada para cada tabela.

UNIQUE
É uma restrição que fornece integridade de entidade para uma coluna ou colunas especificadas usando um índice exclusivo.

AGRUPADOS | NÃO AGRUPADO
Especifica que um índice clusterizado ou não clusterizado é criado para a restrição PRIMARY KEY ou UNIQUE. Restrições de CHAVE PRIMÁRIA padrão para CLUSTERED. Restrições UNIQUE padrão para NONCLUSTERED.

Se já existir uma restrição ou índice clusterizado em uma tabela, CLUSTERED não poderá ser especificado. Se já existir uma restrição ou índice clusterizado em uma tabela, as restrições de CHAVE PRIMÁRIA serão padronizadas como NONCLUSTERED.

As colunas dos tipos de dados ntext, text, varchar(max), nvarchar(max), varbinary(max), xml ou image não podem ser especificadas como colunas para um índice.

column
É uma coluna ou lista de colunas especificadas entre parênteses que são usadas em uma 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 é ASC.

COM FILLFACTOR =fillfactor
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 de fator de preenchimento especificados pelo usuário podem ser de 1 a 100. Se um valor não for especificado, o padrão será 0.

Important

Documentar WITH FILLFACTOR = fillfactor como a única opção de índice que se aplica a restrições PRIMARY KEY ou UNIQUE é mantido para compatibilidade com versões anteriores, mas não será documentado dessa maneira em versões futuras. Outras opções de índice podem ser especificadas 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 posterior.

Especifica o local de armazenamento do índice criado para a restrição. Se partition_scheme_name for especificado, o índice será particionado e as partições serão mapeadas para os grupos de arquivos especificados por partition_scheme_name. Se o grupo de arquivos for especificado, o índice será criado no grupo de arquivos nomeado. Se "default" for especificado ou se ON não for especificado, o índice será criado no mesmo grupo de arquivos que a tabela. Se ON for especificado quando um índice clusterizado for adicionado para uma restrição de CHAVE PRIMÁRIA ou EXCLUSIVO, toda a tabela será movida para o grupo de arquivos especificado quando o índice clusterizado for criado.

Neste 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 "default" ou ON [default]. Se " padrão" for especificado, a opção QUOTED_IDENTIFIER deverá estar ATIVADA 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. As restrições de CHAVE ESTRANGEIRA 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 referenciada pela nova restrição FOREIGN KEY.

EM EXCLUIR { NENHUMA AÇÃO | CASCATA | DEFINIR NULO | DEFINIR PADRÃO }
Especifica qual ação acontece com as linhas da tabela que são alteradas, se essas linhas tiverem uma relação referencial e a linha referenciada for excluída da tabela pai. O padrão é NO ACTION.

SEM AÇÃO
O Mecanismo de Banco de Dados do SQL Server gera um erro e a ação de exclusão na linha da tabela pai é revertida.

CASCADE
As linhas correspondentes são excluídas da tabela de referência se essa linha for excluída da tabela pai.

SET NULL
Todos os valores que compõem a chave estrangeira são definidos como NULL quando a linha correspondente na tabela pai é excluída. 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 é excluída. 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 nenhum valor padrão explícito definido, NULL se tornará o valor padrão implícito da coluna.

Não especifique CASCADE se a tabela será incluída em uma publicação de mesclagem que usa registros lógicos. Para obter mais informações sobre registros lógicos, consulte Alterações de grupo em linhas relacionadas com registros lógicos.

ON DELETE CASCADE não pode ser definido se já existir um gatilho ON DELETE na tabela que está sendo alterada.

Por exemplo, no banco de dados, a AdventureWorks2025 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 uma instrução DELETE for executada em uma linha na tabela Vendor e uma ação ON DELETE CASCADE for especificada para ProductVendor.VendorID, o Mecanismo de Banco de Dados verificará se há uma ou mais linhas dependentes na tabela ProductVendor . Se existirem, as linhas dependentes na tabela ProductVendor serão excluídas, além da linha referenciada na tabela Vendor .

Por outro lado, se NO ACTION for especificado, 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 faça referência a ela.

ON UPDATE { NENHUMA AÇÃO | CASCATA | DEFINIR NULO | DEFINIR PADRÃO }
Especifica qual ação acontece com as linhas na tabela alteradas quando essas linhas têm uma relação referencial e a linha referenciada é atualizada na tabela pai. O padrão é NO ACTION.

SEM AÇÃO
O Mecanismo de Banco de Dados 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
Todos os valores que compõem a chave estrangeira são definidos como NULL quando a linha correspondente na tabela pai é atualizada. 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 nenhum valor padrão explícito definido, NULL se tornará o valor padrão implícito da coluna.

Não especifique CASCADE se a tabela será incluída em uma publicação de mesclagem que usa registros 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 podem ser definidos se já existir um gatilho ON UPDATE na tabela que está sendo alterada.

Por exemplo, no banco de dados, a AdventureWorks2025 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 uma instrução UPDATE for executada em uma linha na tabela Vendor e uma ação ON UPDATE CASCADE for especificada para ProductVendor.VendorID, o Mecanismo de Banco de Dados verificará se há uma ou mais linhas dependentes na tabela ProductVendor . Se existir, a linha dependente na tabela ProductVendor será atualizada, bem como a linha referenciada na tabela Vendor .

Por outro lado, se NO ACTION for especificado, 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 faça referência a ela.

NÃO SE DESTINA À REPLICAÇÃO
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

Pode ser especificado para restrições de CHAVE ESTRANGEIRA e restrições de VERIFICAÇÃO. Se essa cláusula for especificada para uma restrição, ela não será imposta quando os agentes de replicação executarem operações de inserção, atualização ou exclusão.

CONNECTION Especifica o par de tabelas de nós que a restrição de borda determinada tem permissão para conectar. ON DELETE especifica o que acontece com as linhas na tabela de borda, quando os nós que foram conectados através da(s) borda(s) nesta tabela de borda são excluídos.

DEFAULT
Especifica o valor padrão para a coluna. As definições DEFAULT podem ser usadas para fornecer valores para uma nova coluna nas linhas de dados existentes. As definições DEFAULT não podem ser adicionadas a colunas que tenham um tipo de dados de carimbo de data/hora , uma propriedade IDENTITY, uma definição DEFAULT existente ou um padrão acoplado. Se a coluna tiver um padrão existente, o padrão deve ser descartado antes que o novo padrão possa ser adicionado. Se um valor padrão for especificado para uma coluna de tipo definido pelo usuário, o tipo deverá oferecer 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, um nome de restrição pode ser atribuído a um DEFAULT.

constant_expression
É um valor literal, um NULL ou uma função do sistema que é usada como o valor de coluna padrão. Se constant_expression for usado em conjunto com uma coluna definida como sendo de um tipo definido pelo usuário do Microsoft .NET Framework, a implementação do tipo deverá oferecer suporte a uma conversão implícita do tipo constant_expression para o tipo definido pelo usuário.

Coluna FOR
Especifica a coluna associada a uma definição DEFAULT no nível da tabela.

COM VALORES
Ao adicionar uma coluna E uma restrição DEFAULT, se a coluna permitir NULLS usando WITH VALUES irá, para linhas existentes, definir o valor da nova coluna para o valor fornecido em DEFAULT constant_expression. Se a coluna que está sendo adicionada não permitir NULLS, para linhas existentes, o valor da coluna sempre será definido como o valor fornecido na expressão constante DEFAULT. A partir do SQL Server 2012, essa pode ser uma operação de metadados adding-not-null-columns-as-an-online-operation. Se isso for usado quando a coluna relacionada não estiver sendo adicionada, 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 restrição CHECK e retorna TRUE ou FALSE. logical_expression usados com restrições CHECK não podem fazer referência a outra tabela, mas podem fazer referência a outras colunas na mesma tabela para a mesma linha. A expressão não pode fazer referência a um tipo de dados de alias.

Remarks

Quando restrições FOREIGN KEY ou CHECK são adicionadas, todos os dados existentes são verificados quanto a violações de restrição, a menos que a opção WITH NOCHECK seja especificada. Se ocorrer alguma violação, ALTER TABLE falhará e um erro será retornado. Quando uma nova restrição de CHAVE PRIMÁRIA ou EXCLUSIVA é adicionada a uma coluna existente, os dados na coluna ou colunas devem ser exclusivos. Se forem encontrados valores duplicados, ALTER TABLE falhará. A opção WITH NOCHECK não tem efeito quando restrições PRIMARY KEY ou UNIQUE são adicionadas.

Cada restrição PRIMARY KEY e UNIQUE gera um índice. O número de restrições UNIQUE e PRIMARY KEY não pode fazer com que o número de índices na tabela exceda 999 índices não clusterizados e 1 índice clusterizado. As restrições de chave estrangeira não geram automaticamente um índice. No entanto, as colunas de chave estrangeira são freqüentemente usadas em critérios de junção em consultas, combinando a coluna ou colunas na restrição de chave estrangeira de uma tabela com a coluna ou colunas de chave primária ou exclusiva na outra tabela. Um índice nas colunas de chave estrangeira permite que o Mecanismo de Banco de Dados encontre rapidamente dados relacionados na tabela de chaves estrangeiras.

O SQL Server 2022 (16.x) introduz operações retomáveis para adicionar restrições de tabela para restrições de chave primária e chave exclusiva. Para obter mais informações sobre como habilitar e usar operações retomáveis ALTER TABLE ADD CONSTRAINT , consulte Resumable add table constraints.

Examples

Para obter exemplos, consulte ALTER TABLE (Transact-SQL).

Próximos passos