column_definition (Transact-SQL)
Especifica las propiedades de una columna agregada a una tabla mediante ALTER TABLE.
Sintaxis
column_name [ type_schema_name. ] type_name
[
( { precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection } )
]
[ FILESTREAM ]
[
[ CONSTRAINT constraint_name ] DEFAULT constant_expression
[ WITH VALUES ]
| IDENTITY [ (seed , increment ) ] [ NOT FOR REPLICATION ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ <column_constraint> [ ...n ] ]
Argumentos
column_name
Es el nombre de la columna que se va a modificar, agregar o quitar. column_name puede tener entre 1 y 128 caracteres. Si se trata de nuevas columnas, column_name se puede omitir en las columnas creadas con un tipo de datos timestamp. Si no se especifica el argumento column_name en una columna con un tipo de datos timestamp, se utiliza el nombre timestamp.[ type_schema_name**.** ] type_name
Es el tipo de datos de la columna agregada y el esquema al que pertenece.type_name puede ser:
Un tipo de datos del sistema de MicrosoftSQL Server.
Un tipo de datos de alias basado en un tipo de datos del sistema de SQL Server. Los tipos de datos de alias deben crearse mediante CREATE TYPE para poder utilizarse en una definición de tabla.
Un tipo Microsoft.NET Framework definido por el usuario y el esquema al que pertenece. Un tipo de datos .NET Framework definido por el usuario debe crearse mediante CREATE TYPE para poder utilizarse en una definición de tabla.
Si no se especifica el parámetro type_schema_name, el Database Engine (Motor de base de datos) de Microsoft hace referencia a type_name en el siguiente orden:
El tipo de datos del sistema de SQL Server.
El esquema predeterminado del usuario actual en la base de datos actual.
El esquema dbo en la base de datos actual.
precision
Es la precisión del tipo de datos especificado. Para obtener más información acerca de los valores de precisión válidos, vea Precisión, escala y longitud (Transact-SQL).scale
Es la escala del tipo de datos especificado. Para obtener más información acerca de los valores de escala válidos, vea Precisión, escala y longitud (Transact-SQL).max
Sólo se aplica a los tipos de datos varchar, nvarchar y varbinary. Éstos se utilizan para almacenar 2^31 bytes de datos de caracteres y binarios y 2^30 bytes de datos Unicode.CONTENT
Especifica que cada instancia del tipo de datos xml de column_name puede incluir varios elementos de nivel superior. CONTENT sólo se aplica al tipo de datos xml y únicamente se puede especificar si también se especifica xml_schema_collection. Si no se especifica este último parámetro, CONTENT es el comportamiento predeterminado.DOCUMENT
Especifica que cada instancia del tipo de datos xml de column_name puede incluir sólo un elemento de nivel superior. DOCUMENT sólo se aplica al tipo de datos xml y únicamente se puede especificar si también se especifica xml_schema_collection.xml_schema_collection
Sólo se aplica al tipo de datos xml para asociar una colección de esquemas XML al tipo. Antes de escribir una columna de tipo xml para un esquema, éste debe crearse en la base de datos mediante CREATE XML SCHEMA COLLECTION.FILESTREAM
Opcionalmente, especifica un atributo de almacenamiento FILESTREAM para una columna que tiene un type_namevarbinary(max).Si se especifica FILESTREAM para una columna, la tabla debe tener también una columna de tipo de datos uniqueidentifier con el atributo ROWGUIDCOL. Esta columna no debe permitir valores nulos y debe tener una restricción de columna única UNIQUE o PRIMARY KEY. El valor GUID para la columna debe ser suministrado por una aplicación cuando se insertan los datos o por una restricción DEFAULT que utiliza la función NEWID ().
No se puede quitar la columna ROWGUIDCOL ni cambiar las restricciones relacionadas si hay una columna a FILESTREAM definida para la tabla. Solamente se quitará la columna ROWGUIDCOL cuando se quite la última columna FILESTREAM.
Si se especifica el atributo de almacenamiento FILESTREAM para una columna, todos los valores para dicha columna se almacenan en un contenedor de datos de FILESTREAM del sistema de archivos.
Puede consultarse un ejemplo que muestra cómo usar la definición de columna en Introducción al almacenamiento mediante FILESTREAM.
[ CONSTRAINT constraint_name ]
Especifica el inicio de una definición DEFAULT. A fin de mantener la compatibilidad con versiones anteriores de SQL Server, es posible asignar un nombre de restricción a una definición DEFAULT. constraint_name debe ajustarse a las reglas de los identificadores, excepto en que el nombre no puede comenzar por un signo de número (#). Si no se especifica el parámetro constraint_name, se asigna a la definición DEFAULT un nombre generado por el sistema.DEFAULT
Es una palabra clave que especifica el valor predeterminado de la columna. Las definiciones DEFAULT se pueden utilizar para proporcionar valores a una nueva columna de las filas existentes de datos. Las definiciones DEFAULT no se pueden aplicar a columnas de tipo timestamp o columnas con una propiedad IDENTITY. Si se especifica un valor predeterminado para una columna de un tipo definido por el usuario, dicho tipo debe ser compatible con la conversión implícita de constant_expression en el tipo definido por el usuario.constant_expression
Es un valor literal, un valor NULL o una función del sistema que se utiliza como valor predeterminado de la columna. Si se utiliza junto con una columna definida como de tipo .NET Framework definido por el usuario, la implementación del tipo debe ser compatible con la conversión implícita de constant_expression en el tipo definido por el usuario.WITH VALUES
Especifica que el valor dado en DEFAULT constant_expression se almacena en una nueva columna agregada a las filas existentes. Si la columna agregada permite valores NULL y se ha especificado WITH VALUES, el valor predeterminado se almacena en la nueva columna agregada a las filas existentes. Si no se especifica WITH VALUES para las columnas que permiten valores NULL, el valor NULL se almacena en la nueva columna en las filas existentes. Si la nueva columna no permite valores NULL, el valor predeterminado se almacena en las nuevas filas, independientemente de que se especifique o no WITH VALUES.IDENTITY
Especifica que la nueva columna es una columna de identidad. SQL Server Database Engine (Motor de base de datos de SQL Server) proporciona un valor incremental único para la columna. Al agregar columnas de identificadores a tablas existentes, los números de identidad se agregan a las filas existentes de la tabla con los valores de inicialización e incremento. No se garantiza el orden en que las filas se actualizan. También se generan números de identidad para las filas nuevas que se añadan.Las columnas de identidad se utilizan normalmente junto con restricciones PRIMARY KEY para que actúen como identificador exclusivo de fila para la tabla. La propiedad IDENTITY se puede asignar a una columna de tipo tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0). Sólo se puede crear una columna de identidad para cada tabla. La palabra clave DEFAULT y los valores predeterminados enlazados no se pueden utilizar con una columna de identidad. En este caso, debe especificarse tanto el valor de inicialización como el incremento o ninguno. Si no se especifica ninguno, el valor predeterminado es (1,1). No puede modificar una columna de tabla existente para agregar la propiedad IDENTITY.
[!NOTA]
No se permite agregar una columna de identidad a una tabla publicada, puesto que esta operación puede dar lugar a una falta de convergencia cuando la columna se replica en el suscriptor. Los valores de la columna de identidad del publicador dependen del orden en que se almacenen físicamente las filas de la tabla afectada. Las filas se pueden almacenar de forma diferente en el suscriptor; por lo tanto, el valor de la columna de identidad puede ser distinto para las mismas filas.
Para deshabilitar la propiedad IDENTITY de una columna al permitir que los valores se inserten de forma explícita, utilice SET IDENTITY_INSERT.
seed
Es el valor que se utiliza para la primera fila cargada en la tabla.increment
Es el valor incremental que se agrega al valor de identidad de la fila cargada anteriormente.NOT FOR REPLICATION
Se puede especificar para la propiedad IDENTITY. Si se especifica esta cláusula para la propiedad IDENTITY, los valores de las columnas de identidad no aumentan cuando los agentes de replicación realizan operaciones de inserción. Para obtener más información, vea Controlar restricciones, identidades y desencadenadores con NOT FOR REPLICATION.ROWGUIDCOL
Especifica que la columna es una columna de identificador único global de la fila. ROWGUIDCOL sólo se puede asignar a una columna uniqueidentifier y sólo es posible designar una columna uniqueidentifier por tabla como columna ROWGUIDCOL. ROWGUIDCOL no se puede asignar a columnas con tipos de datos definidos por el usuario.ROWGUIDCOL no impone la unicidad de los valores almacenados en la columna. Asimismo, tampoco genera automáticamente valores para nuevas filas que se insertan en la tabla. Para generar valores únicos para cada columna, utilice la función NEWID en instrucciones INSERT o especifique la función NEWID como la predeterminada para la columna. Para obtener más información, vea NEWID (Transact-SQL) e INSERT (Transact-SQL).
COLLATE < collation_name>
Especifica la intercalación de la columna. Si no se especifica, se asigna a la columna la intercalación predeterminada de la base de datos. El nombre de intercalación puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL. Para obtener más información y una lista de nombres de intercalación, vea Nombre de intercalación de Windows (Transact-SQL) y Nombre de intercalación de SQL Server (Transact-SQL).La cláusula COLLATE se puede utilizar para especificar únicamente las intercalaciones de las columnas con tipos de datos char, varchar, nchar y nvarchar.
Para obtener más información acerca de la cláusula COLLATE, vea COLLATE (Transact-SQL).
Notas
Si se agrega una columna que tenga un tipo de datos uniqueidentifier, se puede definir con un valor predeterminado que utilice la función NEWID() para proporcionar los valores de identificador único de la nueva columna para cada fila existente de la tabla.
El Database Engine (Motor de base de datos) no impone un orden para especificar DEFAULT, IDENTITY, ROWGUIDCOL o las restricciones de columna en una definición de columna.
Vea también