ALTER TABLE column_definition (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureWarehouse no Microsoft Fabric

Especifica as propriedades de uma coluna adicionadas a uma tabela com ALTER TABLE.

Convenções de sintaxe de Transact-SQL

Sintaxe

column_name <data_type>  
[ FILESTREAM ]  
[ COLLATE collation_name ]   
[ NULL | NOT NULL ]  
[   
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
]  
[ ROWGUIDCOL ]   
[ SPARSE ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <column_constraint> [ ...n ] ]  
  
<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   
  
<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [   
            WITH FILLFACTOR = fillfactor    
          | WITH ( < index_option > [ , ...n ] )   
        ]   
        [ ON { partition_scheme_name ( partition_column_name )   
            | filegroup | "default" } ]  
  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
}  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

column_name
É o nome da coluna a ser alterada, adicionada ou removida. column_name pode consistir em 1 a 128 caracteres. Para novas colunas, criadas com um tipo de dados timestamp, column_name pode ser omitido. Se nenhum column_name é especificado para uma coluna do tipo de dados timestamp, o nome timestamp é usado.

[ type_schema_name. ] type_name
É o tipo de dados para a coluna adicionada e o esquema ao qual ela pertence.

type_name pode ser:

  • Um tipo de dados do sistema Microsoft SQL Server.

  • Um tipo de dados do alias com base em um tipo de dados de sistema SQL Server. Os tipos de dados de alias precisam ser criados usando CREATE TYPE antes que eles possam ser usados em uma definição de tabela.

  • Um tipo definido pelo usuário Microsoft .NET Framework e o esquema ao qual ele pertence. Um tipo definido pelo usuário .NET Framework precisa ser criado usando CREATE TYPE antes que ele possa ser usado em uma definição de tabela.

Se type_schema_name não for especificado, o Mecanismo de Banco de Dados fará referência a type_name na seguinte ordem:

  • O tipo de dados de sistema SQL Server.

  • O esquema padrão do usuário atual no banco de dados atual.

  • O esquema dbo no banco de dados atual.

precisão
É a precisão do tipo de dados especificado. Para obter mais informações sobre valores de precisão válidos, confira Precisão, Escala e Tamanho (Transact-SQL).

scale
É a escala do tipo de dados especificado. Para obter mais informações sobre valores de escala válidos, confira Precisão, Escala e Tamanho (Transact-SQL).

max
Aplica-se apenas aos tipos de dados varchar, nvarchar e varbinary. São usados para armazenar 2^31 bytes de caractere e dados binários e 2^30 bytes de dados Unicode.

CONTENT
Especifica que cada instância do tipo de dados xml em column_name pode abranger vários elementos de nível superior. CONTENT aplica-se apenas a tipo de dados xml e poderá ser especificado somente se xml_schema_collection também for especificado. Caso não seja especificado, CONTENT será o comportamento padrão.

DOCUMENT
Especifica que cada instância do tipo de dados xml em column_name pode abranger apenas um elemento de nível superior. DOCUMENT aplica-se apenas a tipo de dados xml e poderá ser especificado somente se xml_schema_collection também for especificado.

xml_schema_collection
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

Aplica-se apenas ao tipo de dados xml para associar uma coleção de esquemas XML ao tipo. Antes de digitar uma coluna xml em um esquema, o esquema deve ser criado primeiramente no banco de dados com CREATE XML SCHEMA COLLECTION.

FILESTREAM
Especifica, opcionalmente, o atributo de armazenamento FILESTREAM para a coluna que tem um type_name igual a varbinary(max) .

Quando FILESTREAM é especificado para uma coluna, a tabela também deve ter uma coluna do tipo de dados uniqueidentifier que tem o atributo ROWGUIDCOL. Essa coluna não deve permitir valores nulos e deve ter uma restrição de coluna única UNIQUE ou PRIMARY KEY. O valor GUID da coluna deve ser fornecido por um aplicativo durante a inserção de dados, ou por uma restrição DEFAULT que utilize a função NEWID ().

A coluna ROWGUIDCOL não pode ser descartada e as restrições relacionadas não podem ser alteradas enquanto houver uma coluna FILESTREAM definida para a tabela. A coluna ROWGUIDCOL poderá ser descartada somente depois que a última coluna FILESTREAM for descartada.

Quando o atributo de armazenamento FILESTREAM é especificado para uma coluna, todos os valores da coluna são armazenados em um contêiner de dados FILESTREAM no sistema de arquivos.

Para obter um exemplo que mostra como usar a definição de coluna, confira FILESTREAM (SQL Server).

COLLATE collation_name
Especifica a ordenação da coluna. Se não for especificado, à coluna será atribuída a ordenação padrão do banco de dados. O nome da ordenação tanto pode ser um nome de ordenação do Windows como um nome de ordenação SQL. Para obter uma lista e mais informações, confira Nome da Ordenação do Windows (Transact-SQL) e Nome de Ordenação do SQL Server (Transact-SQL).

A cláusula COLLATE pode ser usada para especificar as ordenações somente de colunas dos tipos de dados char, varchar, nchar e nvarchar.

Para obter mais informações sobre a cláusula COLLATE, confira COLLATE (Transact-SQL).

NULL | NOT NULL
Determina se são permitidos valores nulos na coluna. NULL não é estritamente uma restrição, mas pode ser especificado simplesmente como NOT NULL.

[ CONSTRAINT constraint_name ]
Especifica o início de uma definição de valor DEFAULT. Para manter a compatibilidade com versões anteriores do SQL Server, um nome de restrição pode ser atribuído a um DEFAULT. constraint_name deve seguir as regras de identificadores, a menos que o nome não possa começar com uma tecla jogo da velha (#). Se constraint_name não for especificado, um nome gerado pelo sistema será atribuído à definição DEFAULT.

DEFAULT
É uma palavra-chave que especifica o valor padrão para a coluna. Podem ser usadas definições DEFAULT para fornecer valores para uma coluna nova nas linhas existentes de dados. As definições de DEFAULT não podem ser aplicadas a colunas timestamp nem a colunas com uma propriedade IDENTITY. Se um valor padrão for especificado para uma coluna de tipo definido pelo usuário, o tipo deverá dar suporte a uma conversão implícita de constant_expression no tipo definido pelo usuário.

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

WITH VALUES Ao adicionar uma coluna E uma restrição DEFAULT, se a coluna permitir valores NULLS o uso de WITH VALUES definirá, para as linhas existentes, o valor da nova coluna como o valor fornecido em constant_expression DEFAULT. Se a coluna que está sendo adicionada não permitir valores NULLS, o valor da coluna sempre será definido, para as linhas existentes, como o valor fornecido na expressão constante DEFAULT. A partir do SQL Server 2012, essa pode ser uma operação de metadados adicionando colunas não nulas como uma operação online. Se isso for usado quando a coluna relacionada também não estiver sendo adicionada, não terá qualquer efeito.

Especifica que o valor fornecido em DEFAULT constant_expression seja armazenado em uma nova coluna adicionada às linhas existentes. Se a coluna adicionada permitir valores nulos e WITH VALUES for especificado, o valor padrão será armazenado na nova coluna adicionada a linhas existentes. Se WITH VALUES não estiver especificado para colunas que permitem nulos, o valor NULL será armazenado na nova coluna nas linhas existentes. Se a nova coluna não permitir nulos, o valor padrão será armazenado em linhas novas, independentemente de WITH VALUES ser especificado.

IDENTITY
Especifica que a coluna nova é uma coluna de identidade. O Mecanismo de Banco de Dados do Microsoft SQL Server fornece um valor exclusivo e de incremento para a coluna. Quando você adiciona colunas de identificador a tabelas existentes, os números de identidade são adicionados às linhas existentes da tabela, com os valores de semente e de incremento. A ordem em que as linhas são atualizadas não é garantida. Os números de identidade também são gerados para todas as linhas adicionadas.

As colunas de identidade, em geral, são usadas juntamente com restrições PRIMARY KEY para servir de identificador exclusivo de linha para a tabela. A propriedade IDENTITY pode ser atribuída a uma coluna tinyint, smallint, int, bigint, decimal(p,0) ou numeric(p,0) . Apenas uma coluna de identidade pode ser criada por tabela. A palavra-chave DEFAULT e os padrões associados não podem ser usados com uma coluna de identidade. Ambos os valores de semente e de incremento devem ser identificados, ou nenhum dos dois. Se nenhum dos dois for especificado, o padrão será (1,1).

Observação

Você não pode modificar uma coluna de tabela existente para adicionar a propriedade IDENTITY.

Não há suporte para a adição de uma coluna de identidade a uma tabela publicada porque pode resultar em não convergência quando a coluna for replicada ao Assinante. Os valores na coluna de identidade no Publicador dependerão da ordem em que as linhas para a tabela afetada forem armazenadas fisicamente. As linhas poderiam ser armazenadas diferentemente no Assinante; por isso, o valor para a coluna de identidade pode ser diferente para as mesmas linhas.

Para desabilitar a propriedade IDENTITY de uma coluna, permitindo a inserção explícita de valores, use SET IDENTITY_INSERT.

seed
É o valor usado para a primeira linha carregada na tabela.

increment
É o valor de incremento adicionado ao valor de identidade da linha anterior que é carregada.

NOT FOR REPLICATION
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

Pode ser especificado para a propriedade IDENTITY. Se essa cláusula for especificada para a propriedade IDENTITY, os valores não serão incrementados em colunas de identidade quando os agentes de replicação executarem operações insert.

ROWGUIDCOL
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

Especifica se a coluna é uma linha de coluna de identificador global exclusivo. ROWGUIDCOL pode ser atribuído somente a uma coluna uniqueidentifier, e somente uma coluna uniqueidentifier por tabela pode ser atribuída como a coluna ROWGUIDCOL. ROWGUIDCOL não pode ser atribuído a colunas de tipos de dados definidos pelo usuário.

ROWGUIDCOL não obriga exclusividade dos valores armazenados na coluna. Da mesma forma, ROWGUIDCOL não gera automaticamente valores para as novas linhas inseridas na tabela. Para gerar valores exclusivos para cada coluna, use a função NEWID em instruções INSERT ou especifique a função NEWID como o padrão para a coluna. Para obter mais informações, consulte NEWID (Transact-SQL) e INSERT (Transact-SQL).

SPARSE
Indica que a coluna é uma coluna esparsa. O armazenamento de colunas esparsas é otimizado para obter valores nulos. Colunas esparsas não podem ser designadas como NOT NULL. Para obter restrições adicionais e mais informações sobre colunas esparsas, consulte Usar colunas esparsas.

<column_constraint>
Para obter as definições dos argumentos de restrição de coluna, confira column_constraint (Transact-SQL).

ENCRYPTED WITH
Especifica as colunas de criptografia usando o recurso Always Encrypted.

COLUMN_ENCRYPTION_KEY = key_name
Especifica a chave de criptografia de coluna. Para obter mais informações, confira CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Criptografia determinística usa um método que sempre gera o mesmo valor criptografado para qualquer valor de texto não criptografado. Usar criptografia determinística permite pesquisar usando comparação de igualdade, agrupamento e junção de tabelas usando junções de igualdade baseadas em valores criptografados, mas também pode permitir que usuários não autorizados adivinhem informações sobre valores criptografados examinando padrões na coluna criptografada. A união de duas tabelas em colunas criptografadas de maneira determinística só é possível se ambas as colunas são criptografadas com a mesma chave de criptografia de coluna. A criptografia determinística deve usar uma ordenação de colunas com uma ordem de classificação binary2 para as colunas de caracteres.

Criptografia aleatória usa um método que criptografa os dados de uma maneira menos previsível. A criptografia aleatória é mais segura, mas impede que cálculos e indexação sejam feitos em colunas criptografadas, a menos que sua instância do SQL Server tenha suporte para Always Encrypted com enclaves seguros.

Se você estiver usando o Always Encrypted (sem enclaves seguros), use a criptografia determinística para que as colunas sejam pesquisadas com parâmetros ou com parâmetros de agrupamento, por exemplo, um número de identificação do governo. Use criptografia randomizada para dados como número de cartão de crédito, que não são agrupados a outros registros nem usados para unir tabelas e que não são pesquisados porque você usa outras colunas (como número de transações) para localizar a linha que contém a coluna criptografada de interesse.

Se você está usando o Always Encrypted com enclaves seguros, a criptografia aleatória é um tipo de criptografia recomendado.

As colunas devem ser de um tipo de dados qualificado.

ALGORITHM
Aplica-se a: SQL Server 2016 (13.x) e posterior, Banco de Dados SQL.
Deve ser 'AEAD_AES_256_CBC_HMAC_SHA_256' .

Para mais informações, incluindo restrições de recursos, confira Always Encrypted (Mecanismo de Banco de Dados).

ADD MASKED WITH ( FUNCTION = ' mask_function ')
Aplica-se a: SQL Server 2016 (13.x) e posterior, Banco de Dados SQL.

Especifica uma máscara de dados dinâmicos. mask_function é o nome da função de mascaramento com os parâmetros apropriados. As seguintes opções estão disponíveis:

  • default()

  • email()

  • partial()

  • random()

Para parâmetros de função, consulte Máscara de Dados Dinâmicos.

Comentários

Se a coluna adicionada tiver um tipo de dados uniqueidentifier, ela poderá ser definida com um padrão que usa a função NEWID() para fornecer os valores de identificador exclusivo na nova coluna para cada linha existente da tabela.

O Mecanismo de Banco de Dados não impõe uma ordem para especificar DEFAULT, IDENTITY, ROWGUIDCOL nem restrições de coluna em uma definição de coluna.

A instrução ALTER TABLE falhará se a adição da coluna fizer com que o tamanho da linha de dados exceda 8060 bytes.

Exemplos

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

Consulte Também

ALTER TABLE (Transact-SQL)