Necesito ejecutar unos procesos en una base de datos para inserción y
modificación masiva de unas tablas, son bastantes y hay bastantes claves. Me
gustaría saber si es posible desactivar las restricciones por clave externa y
los triggers para insertar esos registros. Algo parecido a lo que hace la
replica cuando en la relación le indicas 'exigir para replicación' No. Ya sé
que me podrían quedar algunos registros mal, pero no es ningún problema.
Muchas gracias por anticipado.
ALTER TABLE DISABLE ALL TRIGGER
--
-------------------------------------------------------------------------
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email: max...@gmail.com.nospam
-----------------------------------------------------------------------
"Paco" <Pa...@discussions.microsoft.com> escribió en el mensaje
news:36F54107-A614-43BA...@microsoft.com...
¿Con las restricciones de claves foráneas se puede hacer lo mismo?
Sí, es una instrucción muy parecida:
alter table [tutabla] nocheck constraint all
Alberto López Grande
--qwalgrande
Para la inserción masiva no es necesario desactivar los triggers y claves
externas, la instrucción BULK INSERT y el comando bcp ignoran triggers y
claves externas de forma predeterminada.
Por otra parte si esos triggers y claves externas tienen el atributo NOT FOR
REPLICATION, es fácil simular a un agente de replicación, lo único que hay
que hacer es poner "Replication=true" en la cadena de conexión.
Saludos:
Jesús López
"Paco" <Pa...@discussions.microsoft.com> escribió en el mensaje
news:36F54107-A614-43BA...@microsoft.com...
Estoy de acuerdo con Jesùs, si usas BCP o BULK INSERT y no especificas que
se chequeen las restricciones, entonces estas seran ignoradas. Lo que si
debes tener muy en cuenta es que al final de la operacion, las restricciones
CHECK y / o FOREIGN KEY seran marcadas como no-confiables. Si deseas marcalas
como confiables tendras que decirle a SQL Server que las chequee, pero si
estas se rompieron durante la carga masiva, entonces la instruccion sgte dara
error.
alter table dbo.t1
with check check constraint fk_t1_t2
go
Lo mismo pasa si desabilitas las restricciones CHECK o FOREIGN KEY usando
ALTER TABLE y al final de la operacion no las habilitas debidamente. Como
mencionas que las restricciones pueden romperse durante la carga, entonces al
habilitarlas tendras que hacerlo sin que SQL Server las compruebe para
poderlas marcar como confiables.
alter table dbo.t1
with nocheck check constraint fk_t1_t2
go
Mi pregunta es si tu estas al tanto de las consecuencias de tener
restricciones CHECK y/o FOREIGN KEY marcadas como no-confiables?
AMB