restricción restricciones restriccion relaciones referente quitar que llave indica hace foreign foranea externa eliminar desactivar datos constraint claves clave campo sql-server foreign-keys sqlbulkcopy

sql server - relaciones - ¿Cómo circunvala SqlBulkCopy las restricciones de clave externa?



restricción foreign key sql server (2)

¿Cómo logra SqlBulkCopy dejar la base de datos en un estado no válido?

Desactiva las claves externas en la tabla en la que está insertando.

Sí, este es un defecto horrible. Asegúrese de establecer la opción CHECK_CONSTRAINTS (o CheckConstraints para SqlBulkCopy ) si puede permitírselo.

También, por defecto, no dispara disparadores, lo que es igualmente terrible para la consistencia de los datos. Los desencadenantes están ahí por una razón.

Utilicé SqlBulkCopy para insertar una colección de filas en una tabla. Olvidé establecer un valor entero en las filas. La columna que falta se usa para hacer referencia a otra tabla y esto se aplica con una restricción de clave externa.

Para cada fila insertada, el valor entero final fue cero y cero no identificó una fila en la tabla relacionada. Cuando modifiqué el valor a un valor válido y luego intenté volver a ponerlo en cero, no lo aceptaría.

Entonces, mi pregunta es ¿cómo logra SqlBulkCopy dejar la base de datos en un estado no válido?


Por defecto, las restricciones CHECK y FOREIGN KEY se ignoran durante la operación de copia masiva. SqlBulkCopy es una clase administrada que proporciona una funcionalidad similar a la que ofrece el comando bcp de SQL Server. El comando bcp tiene una sugerencia -h y, a menos que proporcione la sugerencia CHECK_CONSTRAINTS, las restricciones CHECK y FOREIGN KEY se ignoran durante la carga masiva. El artículo de Technet establece que: http://technet.microsoft.com/en-us/library/ms162802.aspx

De manera similar, la clase SqlBulkCopy tiene un constructor que acepta enumeración SqlBulkCopyOptions. Tendría que configurar la opción de enumeración CheckConstraints para asegurarse de que las restricciones estén verificadas: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx

Aquí hay un artículo que habla sobre el control de verificación de restricciones - http://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx

Espero que esto ayude.