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

Vea también