column_definition (Transact-SQL)
Especifica as propriedades de uma coluna adicionadas a uma tabela usando ALTER TABLE.
Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual). |
Convenções da sintaxe 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 ]
[ <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 )
}
Argumentos
column_name
É o nome da coluna a ser alterada, adicionada ou removida. column_name podem 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 for especificado para uma coluna de tipo de dados timestamp, o nome timestamp será 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 de 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 Microsoft 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.
precision
É a precisão do tipo de dados especificado. Para obter mais informações sobre valores de precisão válidos, consulte Precisão, escala e comprimento (Transact-SQL).scale
É a escala do tipo de dados especificado. Para obter mais informações sobre valores de escala válidos, consulte Precisão, escala e comprimento (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 incluir vários elementos de nível superior. CONTENT aplica-se apenas ao 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 no column_name pode incluir apenas um elemento de nível superior. DOCUMENT se aplica apenas ao tipo de dados xml, e pode ser especificado somente se xml_schema_collection também for especificado.xml_schema_collection
Aplica-se a: SQL Server 2008 a SQL Server 2014.
Aplica-se apenas ao tipo de dados xml para associar uma coleção de esquema XML ao tipo. Antes de digitar uma coluna xml em um esquema, o esquema deve ser criado primeiramente no banco de dados, usando CREATE XML SCHEMA COLLECTION.
FILESTREAM
Especifica opcionalmente o atributo de armazenamento FILESTREAM para a coluna que tiver um type_name de varbinary(max).Quando FILESTREAM é especificado para uma coluna, a tabela também precisa ter uma coluna do tipo de dados uniqueidentifier com 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, consulte FILESTREAM (SQL Server).
COLLATE collation_name
Especifica o agrupamento da coluna. Se não for especificado, a coluna será atribuída ao agrupamento padrão do banco de dados. O nome do agrupamento tanto pode ser um nome de agrupamento do Windows como um nome de agrupamento SQL. Para obter uma lista e mais informações, consulte Nome de agrupamento do Windows (Transact-SQL) e Nome de agrupamento do SQL Server (Transact-SQL).A cláusula COLLATE pode ser usada para especificar os agrupamentos somente de colunas dos tipos de dados char, varchar, nchar e nvarchar.
Para obter mais informações sobre a cláusula COLLATE, consulte 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 para identificadores, com exceção de que o nome não pode começar com um sinal numérico (#). Se o 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 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 definida pelo usuário, o tipo deverá oferecer 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 usado em conjunto com uma coluna definida para ser do tipo .NET Framework definido pelo usuário, a implementação do tipo deverá oferecer suporte a uma conversão implícita do constant_expression para o tipo definido pelo usuário.WITH VALUES
Especifica que o valor fornecido em constant_expression DEFAULT seja armazenado em uma nova coluna adicionada a linhas existentes. Se a coluna adicionada permitir valores nulos e WITH VALUES estiver especificado, o valor padrão será armazenado na coluna nova 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 SQL Server fornece um valor exclusivo e de incremento para a coluna. Quando as colunas de identificador são adicionadas a tabelas existentes, os números de identidade são adicionados às linhas existentes da tabela, com os valores de semente e de incremento aplicados. A ordem na qual essas 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).
Dica
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 a SQL Server 2014.
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 a SQL Server 2014.
Especifica se a coluna é uma linha de coluna de identificador global exclusivo. ROWGUIDCOL pode ser atribuído somente a uma coluna uniqueidentifier, e apenas uma coluna uniqueidentifier por tabela pode ser atribuída como 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. As 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 as definições dos argumentos de restrição de coluna, consulte column_constraint (Transact-SQL).
Comentários
Se a coluna adicionada tiver um tipo de dados uniqueidentifier, ela poderá ser definida com um padrão que use 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, consulte ALTER TABLE (Transact-SQL).