SQL Server: ¿Cómo ignorar la integridad referencial hasta COMMIT?
Tengo un proceso para mover filas de una base de datos a otra. Debido a algunas cadenas de referencia de clave foránea circular, no puedo eliminar las filas de la base de datos anterior, ni puedo insertarlas en la nueva base de datos.
Como toda la operación ocurre en una transacción1, quiero que SQL Server ignore las fallas de integridad referencial hasta que llameCOMMIT TRANSACTION
.
Por ejemplo2:
Table: Turboencabulators Table: Marselvanes
========================= =======================
PK TurboencabulatorID int /-> PK MarselvaneID int
^ MarselvanesID int --/ HasGrammeter bit
| PantametricFan varchar(50)
+------------------------------- TurboencabulatorID int
Si trato de insertar elturboencabulador en la nueva tabla, fallará sin elMarsella Ya estoy ahí. Invertir el pedido tiene el mismo problema.
Al intentar eliminar las filas antiguas, no puedo eliminar una hasta que se elimine la otra.
He intentado hacer unnde fase múltiple, donde todas las filas se insertan con cualquier columna que esté bajo restricción de clave externa establecida ennulo. Luego actualizo todas las filas insertadas, colocando los valores faltantes adecuados. Luego, para eliminar las filas de origen, anulo todas las columnas afectadas por unFK, luego elimine las filas reales.3
Lo que realmente preferiría es hacer mis operaciones T-SQL y hacer que SQL Server no me lo diga hasta que intente llamar a commit.
Notas1repartido
2hipotético artificial
3que ya no estoy haciendo