DBCC CHECKCONSTRAINTS (Transact-SQL)
Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Comprueba la integridad de una restricción especificada o de todas las restricciones de una tabla determinada en la base de datos actual.
Convenciones de sintaxis de Transact-SQL
Sintaxis
DBCC CHECKCONSTRAINTS
[
(
table_name | table_id | constraint_name | constraint_id
)
]
[ WITH
[ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
[ , ] [ NO_INFOMSGS ]
]
Nota:
Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.
Argumentos
table_name | table_id | constraint_name | constraint_id
La tabla o la restricción que se va a comprobar. Si no se especifica table_name o table_id, se comprueban todas las restricciones habilitadas en la tabla. Si se especifica constraint_name o constraint_id, se comprueba solo esa restricción. Si no se especifica un identificador de tabla ni un identificador de restricción, se comprueban todas las restricciones habilitadas en todas las tablas de la base de datos actual.
Un nombre de restricción identifica exclusivamente a la tabla a la que pertenece. Para obtener más información, vea Database Identifiers.
WITH
Habilita la especificación de opciones.
ALL_CONSTRAINTS
Comprueba todas las restricciones habilitadas y deshabilitadas de la tabla, si se especifica el nombre de tabla o si se comprueban todas las tablas; de lo contrario, comprueba solo la restricción habilitada.
ALL_CONSTRAINTS
no tiene ningún efecto cuando se especifica un nombre de restricción.ALL_ERRORMSGS
Devuelve todas las filas que infringen las restricciones de la tabla comprobada. El valor predeterminado es las 200 primeras filas.
NO_INFOMSGS
Suprime todos los mensajes de información.
Observaciones
DBCC CHECKCONSTRAINTS
construye y ejecuta una consulta para todas las restricciones FOREIGN KEY y CHECK en una tabla.
Por ejemplo, una consulta de clave externa tiene el siguiente formato:
SELECT <columns>
FROM <table_being_checked> LEFT JOIN <referenced_table>
ON <table_being_checked.fkey1> = <referenced_table.pkey1>
AND <table_being_checked.fkey2> = <referenced_table.pkey2>
WHERE <table_being_checked.fkey1> IS NOT NULL
AND <referenced_table.pkey1> IS NULL
AND <table_being_checked.fkey2> IS NOT NULL
AND <referenced_table.pkey2> IS NULL;
La consulta de datos se almacena en una tabla temporal. Tras la comprobación de todas las tablas o restricciones solicitadas, se devuelve el conjunto de resultados.
DBCC CHECKCONSTRAINTS
comprueba la integridad de las restricciones FOREIGN KEY y CHECK, pero no comprueba la integridad de las estructuras de datos del disco en una tabla. Estas comprobaciones de las estructuras de datos pueden realizarse con DBCC CHECKDB y DBCC CHECKTABLE.
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores
Si se especifica table_name o table_id y está habilitado para el control de versiones del sistema, DBCC CHECKCONSTRAINTS
también realiza comprobaciones de coherencia de datos temporales en la tabla especificada. Si no se especifica NO_INFOMSGS, este comando devolverá cada infracción de coherencia en la salida en una línea independiente. Este será el formato del resultado: ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...)
AND <what is wrong with temporal table record>
.
Comprobar | Información adicional en la salida si se ha producido un error en la comprobación |
---|---|
PeriodEndColumn >= PeriodStartColumn (current) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999' |
PeriodEndColumn >= PeriodStartColumn (current, history) | [sys_start] = '{0}' AND [sys_end] = '{1}' |
PeriodStartColumn < current_utc_time (actual) | [sys_start] = '{0}' AND SYSUTCTIME |
PeriodEndColumn < current_utc_time (historial) | [sys_end] = '{0}' AND SYSUTCTIME |
Superposiciones | (sys_start1, sys_end1), (sys_start2, sys_end2) para dos registros que se superponen. Si hay más de dos registros que se superponen, la salida tendrá varias filas, cada una de las cuales mostrará un par de superposiciones. |
Puede especificar constraint_name
o constraint_id
para ejecutar solo comprobaciones de coherencia temporal.
Conjuntos de resultados
DBCC CHECKCONSTRAINTS
devuelve un conjunto de filas con las siguientes columnas.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
Nombre de la tabla | varchar | Nombre de la tabla. |
Constraint Name | varchar | Nombre de la restricción infringida. |
Where | varchar | Asignaciones del valor de columna que identifican la fila o las filas que infringen la restricción. El valor de esta columna se puede utilizar en una cláusula WHERE de una instrucción SELECT para consultar qué filas infringen la restricción. |
No se garantiza que DBCC CHECKCONSTRAINTS
encuentre todas las infracciones de restricciones. Si una sola fila infringe varias restricciones, solo se muestra la cláusula WHERE
para la primera infracción. A menos que exista otra fila con la misma combinación de valores que producen la infracción y que tenga esa infracción como la primera infracción encontrada, faltará la combinación de valores del conjunto de resultados devuelto. Es posible que tenga que ejecutar DBCC CHECKCONSTRAINTS
y corregir problemas varias veces antes de encontrar todas las infracciones de restricción en la base de datos.
Permisos
Debe pertenecer al rol fijo de servidor sysadmin o al rol fijo de base de datos db_owner .
Ejemplos
A. Comprobación de una tabla
El ejemplo siguiente comprueba la integridad de la restricción de la tabla Table1
de la base de datos AdventureWorks2022
.
USE AdventureWorks2022;
GO
CREATE TABLE Table1 (Col1 INT, Col2 CHAR(30));
GO
INSERT INTO Table1 VALUES (100, 'Hello');
GO
ALTER TABLE Table1 WITH NOCHECK ADD CONSTRAINT chkTab1 CHECK (Col1 > 100);
GO
DBCC CHECKCONSTRAINTS (Table1);
GO
B. Comprobación de una restricción específica
El ejemplo siguiente comprueba la integridad de la restricción CK_ProductCostHistory_EndDate
.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C. Comprobación de todas las restricciones habilitadas y deshabilitadas en todas las tablas
El ejemplo siguiente comprueba la integridad de todas las restricciones habilitadas y deshabilitadas en todas las tablas de la base de datos actual.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO