Compartir a través de


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

Actualizado: 12 de diciembre de 2006

Al realizar importaciones masivas de datos, puede controlar si las restricciones CHECK y FOREIGN KEY 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.

Si la tabla no estaba vacía antes de la operación de importación masiva, el costo de volver a validar la restricción puede ser mayor que el costo de aplicar las restricciones CHECK o FOREIGN KEY a los datos incrementales. Después de importar datos problemáticos, debe utilizar Transact-SQL para limpiar los datos importados.

ms186247.note(es-es,SQL.90).gifImportante:
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 y FOREIGN KEY. Sin embargo, la instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...) le permite anular la comprobación de las restricciones CHECK y FOREIGN KEY. .

[!NOTA] No puede deshabilitar las restricciones UNIQUE, PRIMARY KEY ni NOT NULL.

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

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 durante una operación de importación masiva, los datos que infringen las restricciones existentes pueden insertarse en la tabla. Por tanto, cada restricción omitida en la tabla se marca como is_not_trusted en la vista de catálogo sys.check_constraints o sys.foreign_keys. En algún momento, tendrá que comprobar las restricciones en la tabla completa.

Puede identificar las filas importadas de la tabla que infringen las restricciones; para ello, compruebe los datos importados manualmente mediante los procedimientos almacenados o las consultas de Transact-SQL que prueban las condiciones de la restricción.

Vea también

Otros recursos

bcp (utilidad)
BULK INSERT (Transact-SQL)
DBCC CHECKCONSTRAINTS (Transact-SQL)
INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
Sugerencias de tabla (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido modificado:
  • Se revisó el tema para indicar que las restricciones CHECK y FOREIGN KEY se controlan juntas.