Compartir a través de


ALTER TABLE column_definition (Transact-SQL)

Aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAlmacén en Microsoft FabricBase de datos SQL en Microsoft Fabric

Especifica las propiedades de una columna que se agregan a una tabla mediante ALTER TABLE.

Convenciones de sintaxis de Transact-SQL

Syntax

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 )   
}  

Arguments

column_name

El nombre de la columna que se va a modificar, agregar o quitar. column_name puede tener entre 1 y 128 caracteres. En el caso de las nuevas columnas, creadas con un tipo de datos timestamp , se puede omitir column_name . Si no se especifica el argumento column_name en una columna con un tipo de datos timestamp, se usa el nombre timestamp.

[ type_schema_name. ] type_name

Tipo de datos de la columna que se agrega y el esquema al que pertenece.

type_name puede ser:

  • Tipo de datos de sistema de Microsoft SQL Server.

  • Un tipo de datos del alias basado en el tipo de datos del sistema de SQL Server. Los tipos de datos de alias se deben crear mediante CREATE TYPE para poder usarlos en una definición de tabla.

  • Un tipo definido por el usuario de Microsoft .NET Framework y el esquema al que pertenece. Se debe crear un tipo definido por el usuario de .NET Framework mediante CREATE TYPE para poder usarlo en una definición de tabla.

Si no se especifica type_schema_name, Motor de base de datos de Microsoft SQL Server hace referencia a type_name en este 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 de la base de datos actual.

precision
La precisión del tipo de datos especificado. Para más información sobre los valores de precisión válidos, vea Precisión, escala y longitud.

scale
La escala del tipo de datos especificado. Para más información sobre los valores de escala válidos, vea Precisión, escala y longitud.

max
Solo se aplica a los tipos de datos varchar, nvarchar y varbinary. Estos (max) tipos de datos se usan para almacenar 2^31 bytes de caracteres y datos binarios, y 2^30 bytes de datos Unicode.

CONTENT
Especifica que cada instancia del tipo de datos xml en column_name puede incluir varios elementos de nivel superior. CONTENT solo se aplica al tipo de datos xml y solo se puede especificar si también se especifica xml_schema_collection. Si no se especifica, CONTENT es el comportamiento predeterminado.

DOCUMENT
Especifica que cada instancia del tipo de datos xml en column_name puede incluir un solo elemento de nivel superior. DOCUMENT solo se aplica al tipo de datos xml y solo se puede especificar si también se especifica xml_schema_collection.

xml_schema_collection
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

Solo se aplica al tipo de datos xml para asociar una colección de esquemas XML al tipo. Antes de agregar una columna de tipo de datos xml a un esquema, primero se debe crear el esquema 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_name de varbinary(max) .

Si se especifica FILESTREAM para una columna, la tabla debe tener también una columna del 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. La aplicación proporciona el GUID valor de la columna cuando se insertan datos o mediante una restricción DEFAULT.

No se puede quitar la columna ROWGUIDCOL ni se pueden cambiar las restricciones relacionadas si hay definida una columna FILESTREAM para la tabla. Solamente se puede quitar la columna ROWGUIDCOL después de quitarse 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.

Para obtener un ejemplo que muestra cómo usar la definición de columna, vea FILESTREAM.

COTEJAR 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 una lista y más información, vea Windows Collation Name [Nombre de intercalación de Windows (Transact-SQL)] y SQL Server Collation Name [Nombre de intercalación de SQL Server (Transact-SQL)].

La COLLATE cláusula se puede usar para especificar las intercalaciones solo de las columnas de los tipos de datos char, varchar, nchar y nvarchar .

Para obtener más información sobre la COLLATE cláusula , vea COLLATE.

NULL | NO NULL

Determina si NULL se permiten valores en la columna. NULL no es estrictamente una restricción, pero se puede especificar igual que NOT NULL.

[ RESTRICCIÓN constraint_name ]

Especifica el inicio de una DEFAULT definición de valor. Para mantener la compatibilidad con versiones anteriores de SQL Server, se puede asignar un nombre de restricción a .DEFAULT constraint_name deben seguir las reglas de los identificadores, salvo que el nombre no puede empezar con un signo de número (#). Si no se especifica constraint_name, se asigna un nombre generado por el sistema a la DEFAULT definición.

DEFAULT

Es una palabra clave que especifica el valor predeterminado de la columna. DEFAULT Las definiciones se pueden usar para proporcionar valores para una nueva columna en las filas de datos existentes. DEFAULT Las definiciones no se pueden aplicar a columnas de marca de tiempo ni a columnas con una IDENTITY propiedad . Si se especifica un valor predeterminado para una columna de un tipo definido por el usuario, dicho tipo debe admitir la conversión implícita de constant_expression al tipo definido por el usuario.

constant_expression
Es un valor literal, una NULLfunción del sistema o que se usa como valor de columna predeterminado. Si se usa con una columna definida para ser de un tipo definido por el usuario de .NET Framework, la implementación del tipo debe admitir una conversión implícita del constant_expression al tipo definido por el usuario.

CON VALORES

Al agregar una columna y una DEFAULT restricción, si la columna permite NULLS, WITH VALUES establece el valor de la nueva columna en el valor especificado en DEFAULT constant_expression para las filas existentes.

Si la columna que se agrega no permite VALORES NULL, para las filas existentes, el valor de la columna siempre se establecerá en el valor especificado en DEFAULT constant expression.

A partir de SQL Server 2012 (11.x), puede ser una operación de metadatos que agrega columnas no null,as-an-online-operation.

Si se usa cuando no se está agregando también la columna relacionada, no tiene ningún impacto.

Especifica que el valor especificado en DEFAULT constant_expression se almacena en una nueva columna que se agrega 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 que se agrega a las filas existentes. Si WITH VALUES no se especifica para las columnas que permiten valores NULL, el valor NULL se almacena en la nueva columna, en 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. El 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 usan normalmente con PRIMARY KEY restricciones para servir como identificador de fila único para la tabla. La IDENTITY propiedad se puede asignar a una columna tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0). Solo se puede crear una columna de identidad para cada tabla. La DEFAULT palabra clave y los valores predeterminados enlazados no se pueden usar 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).

Note

No se puede modificar una columna de tabla existente para agregar la IDENTITY propiedad .

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 en el 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 diferente para las mismas filas.

Para deshabilitar la IDENTITY propiedad de una columna, para lo que se permiten insertar valores explícitamente, use SET IDENTITY_INSERT.

semilla Valor usado para la primera fila cargada en la tabla.

incremento Valor incremental agregado al valor de identidad de la fila anterior que se carga.

NO PARA REPLICACIÓN

Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

Se puede especificar para la IDENTITY propiedad . Si se especifica esta cláusula para la IDENTITY propiedad , los valores no se incrementan en columnas de identidad cuando los agentes de replicación realizan operaciones de inserción.

ROWGUIDCOL

Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

Especifica que la columna es una columna de identificador único global de la fila. ROWGUIDCOL solo se puede asignar a una columna uniqueidentifier y solo se puede designar una columna uniqueidentifier por tabla como columna ROWGUIDCOL . ROWGUIDCOL no se puede asignar a columnas de tipos de datos definidos por el usuario.

ROWGUIDCOL no aplica la unicidad de los valores almacenados en la columna. Además, ROWGUIDCOL no genera automáticamente valores para las nuevas filas que se insertan en la tabla. Para generar valores únicos para cada columna, use la NEWID() función en INSERT instrucciones o especifique la NEWID() función como valor predeterminado para la columna. Para obtener más información, vea NEWID (Transact-SQL) e INSERT (Transact-SQL).

SPARSE

Indica que la columna es una columna dispersa. El almacenamiento de columnas dispersas está optimizado para los valores NULL. Las columnas dispersas no se pueden designar como NOT NULL. Para conocer otras restricciones y leer más información sobre columnas dispersas, vea Usar columnas dispersas.

<column_constraint>
Para obtener las definiciones de los argumentos de restricción de columna, vea column_constraint (Transact-SQL).

CIFRADO CON

Especifica columnas de cifrado mediante la característica Always Encrypted. ENCRYPTED WITH no está soportado en bases de datos SQL en Microsoft Fabric.

COLUMN_ENCRYPTION_KEY = key_name

Especifica la clave de cifrado de columna. Para más información, vea CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMD }

Elcifrado determinista usa un método que genera siempre el mismo valor cifrado para cualquier valor de texto no cifrado concreto. Al usar cifrado determinista se pueden realizar búsquedas mediante comparación de igualdad, agrupar y unir tablas mediante combinaciones de igualdad basadas en valores cifrados, y además se puede permitir a usuarios no autorizados que averigüen la información sobre valores cifrados mediante el análisis de patrones en la columna cifrada. La combinación de dos tablas en columnas cifradas de manera determinista solo es posible si ambas columnas están cifradas con la misma clave de cifrado de columna. El cifrado determinista debe usar una intercalación de columna con un criterio de ordenación binario 2 para columnas de caracteres.

Elcifrado aleatorio utiliza un método que cifra los datos de una manera menos predecible. El cifrado aleatorio es más seguro, pero impide todos los cálculos y la indexación en columnas cifradas, a menos que la instancia de SQL Server admita Always Encrypted con enclaves seguros.

Si usa Always Encrypted (sin los enclaves seguros), utilice el cifrado determinista para que se busquen columnas con parámetros o parámetros de agrupación, por ejemplo, un número de identificación gubernamental. Use el cifrado aleatorio, para datos como un número de tarjeta de crédito que no se agrupa con otros registros o se usa para combinar tablas, y que no se busca porque se usan otras columnas (por ejemplo, un número de transacción) para buscar la fila que contiene la columna cifrada de interés.

Si usa Always Encrypted con enclaves seguros, se recomienda, por ejemplo, el cifrado aleatorio.

Las columnas deben ser de un tipo de datos aplicable.

ALGORITHM

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores, SQL Database

Debe ser 'AEAD_AES_256_CBC_HMAC_SHA_256' .

Para más información, incluidas restricciones de características, vea Always Encrypted (Motor de base de datos).

AÑADIR ENMASCARADO CON (FUNCIÓN = ' mask_function ')

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores, SQL Database

Especifica una máscara dinámica de datos. mask_function es el nombre de la función de máscara con los parámetros adecuados. Las siguientes funciones están disponibles:

  • default()
  • email()
  • partial()
  • random()

Para conocer más parámetros de función, vea Enmascaramiento de datos dinámicos.

Remarks

Si se agrega una columna que tiene un tipo de datos uniqueidentifier , se puede definir con un valor predeterminado que usa la NEWID() función para proporcionar los valores de identificador únicos de la nueva columna para cada fila existente de la tabla. Para obtener más información, vea NEWID (Transact-SQL).

El motor de base de datos no aplica un orden para especificar DEFAULTrestricciones de columna , IDENTITY, ROWGUIDCOLo en una definición de columna.

Se ALTER TABLE produce un error en la instrucción si la adición de la columna hace que el tamaño de fila de datos supere los 8060 bytes.

Examples

Para consultar otros ejemplos, vea ALTER TABLE (Transact-SQL).