Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
>Warehouse in Microsoft Fabric
SQL database in Microsoft Fabric
Use
Transact-SQL convenciones de sintaxis
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 el inicio de una definición para una PRIMARY KEYrestricción , UNIQUE, FOREIGN KEYo CHECK o DEFAULT.
nombre_de_restricción
Nombre de la restricción. Los nombres de restricción deben seguir las reglas de los identificadores, salvo que el nombre no puede empezar con un signo de número (#). Si no proporciona constraint_name, el sistema asigna un nombre generado a la restricción .
CLAVE PRINCIPAL
Restricción que exige la integridad de la entidad para una columna o columnas especificadas mediante un índice único. Solo puede crear una PRIMARY KEY restricción para cada tabla.
UNIQUE
Restricción que proporciona integridad de entidad para una columna o columna especificadas mediante un índice único.
AGRUPADO | NO AGRUPADO
Especifica que se crea un índice agrupado o no clúster para la PRIMARY KEY restricción o UNIQUE .
PRIMARY KEY de forma predeterminada, las restricciones son CLUSTERED.
UNIQUE de forma predeterminada, las restricciones son NONCLUSTERED.
Si ya existe una restricción agrupada o un índice en una tabla, no se puede especificar CLUSTERED. Si ya existe una restricción agrupada o un índice en una tabla, PRIMARY KEY las restricciones tienen como valor predeterminado NONCLUSTERED.
No se pueden especificar columnas que son de los tipos de datos ntext, text, varchar(max), nvarchar(max), varbinary(max), xml o image como columnas para un índice.
column
Columna o lista de columnas especificadas entre paréntesis que se usan en una nueva restricción.
[ ASC | DESC ]
Especifica cómo se ordenan la columna o las columnas que participan en las restricciones de la tabla. El valor predeterminado es el criterio de ordenación ascendente (ASC).
CON FILLFACTOR = fillfactor
Especifica cómo se debe completar el Motor de base de datos debe hacer que cada página de índice se use para almacenar los datos del índice. Los valores de fillfactor especificados por el usuario pueden estar comprendidos entre 1 y 100. Si no especifica un valor, el valor predeterminado es 0.
Para la compatibilidad con versiones anteriores, esta documentación incluye WITH FILLFACTOR = <fillfactor> como la única opción de índice que se aplica a PRIMARY KEY las restricciones o UNIQUE . Esta sintaxis no se documentará en futuras versiones. Puede especificar otras opciones de índice en la cláusula index_option de ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | grupo de archivos | "default" }
Applies to: SQL Server 2008 (10.0.x) y versiones posteriores.
Especifica la ubicación de almacenamiento del índice creado para la restricción. Si especifica partition_scheme_name, el índice se particiona y las particiones se asignan a los grupos de archivos que partition_scheme_name especifican. Si especifica el grupo de archivos, el índice se crea en el grupo de archivos con nombre. Si especifica "default" o si no especifica ON en absoluto, el índice se crea en el mismo grupo de archivos que la tabla. Si especifica ON al agregar un índice agrupado para una PRIMARY KEY restricción o UNIQUE , la tabla completa se mueve al grupo de archivos especificado cuando se crea el índice agrupado.
En este contexto, el valor predeterminado no es una palabra clave; es un identificador para el grupo de archivos predeterminado y debe delimitarse, como en ON"default" o ON[default]. Si especifica "default", la QUOTED_IDENTIFIER opción debe ser ON para la sesión actual. Esta es la configuración predeterminada.
REFERENCIAS DE CLAVE EXTERNA
Restricción que proporciona integridad referencial para los datos de la columna.
FOREIGN KEY las restricciones requieren que cada valor de la columna exista en la columna especificada de la tabla a la que se hace referencia.
referenced_table_name
Tabla a la que hace referencia la FOREIGN KEY restricción.
ref_column
Columna o lista de columnas entre paréntesis a las que hace referencia la nueva FOREIGN KEY restricción.
AL ELIMINAR { NO ACTION | CASCADA | SET NULL | ESTABLECER DEFAULT }
Especifica qué acción ocurre con las filas de la tabla que se modifican, si esas filas tienen una relación referencial y se elimina la fila a la que se hace referencia de la tabla primaria. El valor predeterminado es NO ACTION.
SIN ACCIÓN
El Motor de base de datos de SQL Server genera un error y revierte la acción de eliminación en la fila de la tabla primaria.
CASCADE
Elimina las filas correspondientes de la tabla de referencia si elimina esa fila de la tabla primaria.
SET NULL
Establece todos los valores que componen la clave externa en NULL al eliminar la fila correspondiente de la tabla primaria. Para que esta restricción se ejecute, las columnas de clave externa deben aceptar valores NULL.
ESTABLECER PREDETERMINADO
Establece todos los valores que componen la clave externa en sus valores predeterminados al eliminar la fila correspondiente de la tabla primaria. Para que esta restricción se ejecute, todas las columnas de clave externa deben tener definiciones predeterminadas. Si una columna acepta valores NULL y no hay ningún valor predeterminado explícito establecido, NULL se convierte en el valor predeterminado implícito de la columna.
No especifique CASCADE si la tabla se incluye en una publicación de combinación que usa registros lógicos. Para obtener más información sobre los registros lógicos, vea Agrupar cambios en filas relacionadas con registros lógicos.
No se puede definir ON DELETE CASCADE si ya existe un INSTEAD OF desencadenador ON DELETE en la tabla que está modificando.
Por ejemplo, en la base de datos AdventureWorks2025, la tabla ProductVendor tiene una relación referencial con la tabla Vendor. La ProductVendor.VendorID clave externa hace referencia a la Vendor.VendorID clave principal.
Si ejecuta una instrucción DELETE en una fila de la tabla /Vendor y especifica una acción ON DELETE CASCADE para ProductVendor.VendorID, el Motor de base de datos comprueba si hay una o varias filas dependientes en la tabla ProductVendor. Si existe alguna, se eliminan las filas dependientes de la ProductVendor tabla, además de la fila a la que se hace referencia en la Vendor tabla.
Por el contrario, si especifica NO ACTION, el Motor de base de datos genera un error y revierte la acción de eliminación en la fila Vendor cuando hay al menos una fila en la tabla ProductVendor que hace referencia a ella.
EN ACTUALIZACIÓN { SIN ACCIÓN | CASCADA | SET NULL | ESTABLECER DEFAULT }
Especifica qué acción ocurre con las filas de la tabla que se modifican cuando esas filas tienen una relación referencial y actualiza la fila a la que se hace referencia en la tabla primaria. El valor predeterminado es NO ACTION.
SIN ACCIÓN
El Motor de base de datos genera un error y la acción de actualización de la fila de la tabla primaria se revierte.
CASCADE
Si esa fila se actualiza en la tabla primaria, las filas correspondientes se actualizan en la tabla de referencia.
SET NULL
Establece todos los valores que componen la clave externa en NULL al actualizar la fila correspondiente en la tabla primaria. Para que esta restricción se ejecute, las columnas de clave externa deben aceptar valores NULL.
ESTABLECER PREDETERMINADO
Cuando se actualiza la fila correspondiente en la tabla primaria, todos los valores que componen la clave externa se establecen en sus valores predeterminados. Para que esta restricción se ejecute, todas las columnas de clave externa deben tener definiciones predeterminadas. Si una columna acepta valores NULL y no hay ningún valor predeterminado explícito establecido, NULL se convierte en el valor predeterminado implícito de la columna.
No especifique CASCADE si la tabla se incluye en una publicación de combinación que usa registros lógicos. Para obtener más información sobre los registros lógicos, vea Agrupar cambios en filas relacionadas con registros lógicos.
ON UPDATE CASCADENo se puede definir , SET NULLo SET DEFAULT si ya existe un INSTEAD OF desencadenador ON UPDATE en la tabla que se está modificando.
Por ejemplo, en la base de datos AdventureWorks2025, la tabla ProductVendor tiene una relación referencial con la tabla Vendor. La ProductVendor.VendorID clave externa hace referencia a la Vendor.VendorID clave principal.
Si ejecuta una instrucción ProductVendor tabla, así como la fila a la que se hace referencia en la Vendor tabla.
Por el contrario, si especifica NO ACTION, el Motor de base de datos genera un error y revierte la acción de actualización en la fila Vendor cuando hay al menos una fila en la tabla ProductVendor que hace referencia a ella.
NO PARA REPLICACIÓN
Applies to: SQL Server 2008 (10.0.x) y versiones posteriores.
Si especifica esta cláusula para una restricción, los agentes de replicación no aplican la restricción cuando realizan operaciones de escritura. Puede especificar esta cláusula para FOREIGN KEY restricciones y CHECK restricciones.
CONNECTION
Especifica el par de tablas de nodos que la restricción perimetral especificada puede conectarse.
ON DELETE especifica lo que sucede con las filas de la tabla perimetral cuando se eliminan los nodos que conecta el perímetro.
DEFAULT
Especifica el valor predeterminado de la columna. Use DEFAULT definiciones para proporcionar valores para una nueva columna en las filas de datos existentes. No se pueden agregar DEFAULT definiciones a columnas que tengan un tipo de datos de marca de tiempo , una IDENTITY propiedad, una definición existente DEFAULT o un valor predeterminado enlazado. Si la columna tiene un valor predeterminado existente, debe quitar el valor predeterminado para poder agregar un nuevo valor predeterminado. Si especifica un valor predeterminado para una columna de tipo definido por el usuario, el tipo debe admitir una conversión implícita de constant_expression al tipo definido por el usuario. Para mantener la compatibilidad con versiones anteriores de SQL Server, puede asignar un nombre de restricción a un DEFAULT.
constant_expression
Valor literal, , NULLo una función del sistema que se usa como valor de columna predeterminado. Si usa constant_expression junto con una columna definida para que sea de un tipo definido por el usuario Microsoft .NET Framework, la implementación del tipo debe admitir una conversión implícita de la constant_expression al tipo definido por el usuario.
COLUMNA FOR
Especifica la columna asociada a una definición de nivel DEFAULT de tabla.
CON VALORES
Al agregar una columna y una
DEFAULTrestricción, si la columna permite valores NULL, medianteWITH VALUESestablece el valor de la nueva columna para las filas existentes en el valor especificado enDEFAULTconstant_expression.Si la columna que va a agregar no permite valores NULL, el valor de la columna para las filas existentes siempre se establece en el valor especificado en la
DEFAULTexpresión constante.
En SQL Server 2012 y versiones posteriores, esta operación puede ser una operación de metadatos adding-not-null-columns-as-an-online-operation.
Si usa WITH VALUES cuando no se agrega la columna relacionada, no tiene ningún efecto.
CHECK
Es una restricción que exige la integridad del dominio limitando los valores posibles que se pueden escribir en una o varias columnas.
logical_expression
Expresión lógica usada en una CHECK restricción que devuelve TRUE o FALSE.
logical_expression usado con CHECK restricciones no puede hacer referencia a otra tabla, pero puede hacer referencia a otras columnas de la misma tabla para la misma fila. La expresión no puede hacer referencia a un tipo de datos de alias.
Remarks
Al agregar FOREIGN KEY restricciones o CHECK , el sistema comprueba todos los datos existentes por infracciones de restricciones a menos que especifique la WITH NOCHECK opción . Si se produce alguna infracción, ALTER TABLE se produce un error y devuelve un error. Al agregar una restricción nueva PRIMARY KEY o UNIQUE a una columna existente, los datos de la columna o columnas deben ser únicos. Si se encuentran valores duplicados, ALTER TABLE se produce un error. La WITH NOCHECK opción no tiene ningún efecto al agregar PRIMARY KEY restricciones o UNIQUE .
Cada PRIMARY KEY restricción y UNIQUE genera un índice. El número de UNIQUE restricciones y PRIMARY KEY no puede hacer que el número de índices de la tabla supere los 999 índices no agrupados y 1 índice agrupado. Las restricciones de clave externa no generan automáticamente un índice. Sin embargo, con frecuencia se usan columnas de clave externa en criterios de combinación en consultas haciendo coincidir la columna o columnas de la restricción de clave externa de una tabla con la columna o columnas de clave principal o única de la otra tabla. Un índice en las columnas de clave externa permite al Motor de base de datos buscar rápidamente datos relacionados en la tabla de claves externas.
En SQL Server 2022 (16.x) y versiones posteriores, las operaciones reanudables admiten la adición de restricciones de tabla para las restricciones de clave principal y clave única. Para obtener más información sobre cómo habilitar y usar operaciones ALTER TABLE ADD CONSTRAINT reanudables, consulte Adición reanudable de restricciones de tabla.
Warehouse en Microsoft Fabric admite ADD o DROPPRIMARY KEY, UNIQUE y restricciones de columna FOREIGN_KEY, pero solo si especifica la opción NOT ENFORCED. El almacenamiento en Microsoft Fabric bloquea todas las demás operaciones de ALTER TABLE.
Examples
Para obtener ejemplos, vea ALTER TABLE (Transact-SQL).