Controlar comprobación de restricciones mediante operaciones de importación masiva

Al realizar importaciones masivas de datos, puede controlar si las restricciones CHECK se aplican mediante la operación de importación masiva. Una restricción es una regla de negocios que se coloca en una columna para definir sus valores válidos; por ejemplo, una restricción de una columna con extensiones telefónicas puede necesitar el formato ####. La definición y comprobación de restricciones es el mecanismo estándar para aplicar la integridad de datos. Microsoft recomienda el uso de comprobación de restricciones durante una importación masiva incremental.

En ocasiones es preferible omitir las restricciones. Un ejemplo sería que los datos de entrada contuviesen filas que infringieran las restricciones. Si omite las restricciones, puede cargar los datos y, a continuación, utilizar instrucciones Transact-SQL para limpiar los datos.

Nota

Si omite las restricciones durante una operación de importación masiva, los datos que infringen las restricciones existentes pueden insertarse en la tabla. Por tanto, la restricción de la tabla se marca como is_not_trusted en la vista de catálogo sys.check_constraints (para obtener más información, vea sys.check_constraints (Transact-SQL)). En algún momento deberá comprobar las restricciones de toda la tabla.

Si la tabla no estaba vacía antes de la operación de importación masiva, el costo de revalidar la restricción puede exceder el costo de aplicar restricciones CHECK a los datos incrementales. Después de importar datos problemáticos, debe utilizar Transact-SQL para limpiar los datos importados.

Nota importanteImportante

Al deshabilitar las restricciones, puede que se tome un bloqueo de modificación de esquema para actualizar los metadatos. Esto podría interferir con otros comandos (como una generación de índice en línea) o transacciones. Por ejemplo, podría producirse un error en una transacción de aislamiento de instantánea que intente obtener acceso a la tabla de destino debido a cambios de DDL simultáneas.

Para obtener más información acerca de las restricciones, vea Restricciones.

Durante una operación de importación masiva, el comportamiento de comprobación de restricciones depende del comando utilizado en la operación. De manera predeterminada, el comando bcp y la instrucción BULK INSERT omiten las restricciones. En cambio, para una instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...), el valor predeterminado es comprobar las restricciones.

En la siguiente tabla se resume el comportamiento predeterminado de comprobación de restricciones de los comandos de importación masiva.

Comando

Comportamiento predeterminado

bcp

Omitir restricciones

BULK INSERT

Omitir restricciones

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Comprobar restricciones

Cada uno de los comandos de importación masiva proporciona un calificador que permite cambiar el control de las restricciones, como se explica en las siguientes secciones.

Comprobar restricciones con bcp o BULK INSERT

De manera predeterminada, las restricciones se omiten durante una operación de importación masiva que se realice mediante el comando bcp o la instrucción BULK INSERT.

Mediante el comando bcp o la instrucción BULK INSERT, puede especificar que se apliquen restricciones durante una operación de importación masiva. Si se aplican restricciones, se ralentiza la operación de importación masiva, pero se garantiza que ninguno de los datos insertados infrinja las restricciones existentes. En la siguiente tabla se resumen los calificadores que pueden utilizarse para especificar la aplicación de restricciones durante una operación de importación masiva.

Comando

Calificador

Tipo de calificador

bcp

-h"CHECK_CONSTRAINTS"

Sugerencia

BULK INSERT

CHECK_CONSTRAINTS

Argumento

Para obtener más información, vea bcp (utilidad) y BULK INSERT (Transact-SQL).

Omitir restricciones en INSERT ... SELECT * FROM OPENROWSET(BULK...)

De forma predeterminada, INSERT comprueba las restricciones CHECK, no obstante, la instrucción .INSERT ... SELECT * FROM OPENROWSET(BULK...) le permite anular la comprobación de las restricciones CHECK. Para obtener más información acerca de esas restricciones, vea Restricciones CHECK.

Nota

Sólo se pueden deshabilitar las restricciones CHECK. No puede deshabilitar las restricciones UNIQUE, PRIMARY KEY, FOREIGN KEY o NOT NULL.

En la tabla siguiente se resume la sugerencia de tabla para omitir las restricciones CHECK.

Comando

Calificador

Tipo de calificador

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH (IGNORE_CONSTRAINTS)

Sugerencia de tabla

En el siguiente ejemplo se muestra cómo utilizar este calificador. Para obtener más información acerca de la sugerencia IGNORE_CONSTRAINTS, vea Sugerencias de tabla (Transact-SQL).

Verificar la importación de datos

Si omite las restricciones en una operación de la importación masiva, puede identificar posteriormente las filas de la tabla importada que incumplen las restricciones comprobando manualmente los datos importados. Para comprobar manualmente los datos, puede Transact-SQL consultas o procedimientos almacenados que prueban las condiciones de restricción.

Nota

Para obtener información sobre si se confía en una tabla, vea la columna is_not_trusted en la vista de catálogo sys.check_constraints. Para obtener más información, vea sys.check_constraints (Transact-SQL).