Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Desactivar restricciones de clave externa y triggers

426 views
Skip to first unread message

Paco

unread,
Jan 14, 2008, 5:50:03 AM1/14/08
to
Hola a todos

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.

Maxi

unread,
Jan 14, 2008, 8:12:14 AM1/14/08
to
Paco, claro que puedes hacer eso, para los triggers revisa

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...

Paco

unread,
Jan 14, 2008, 9:30:03 AM1/14/08
to
Gracias por la respuesta.

¿Con las restricciones de claves foráneas se puede hacer lo mismo?

qwalgrande

unread,
Jan 14, 2008, 11:38:02 AM1/14/08
to
Hola.

Sí, es una instrucción muy parecida:

alter table [tutabla] nocheck constraint all

Alberto López Grande

--qwalgrande

Jesús López

unread,
Jan 14, 2008, 11:50:41 AM1/14/08
to
A parte de lo que ya te han comentado (como desactivar triggers y claves
externas) yo añadiría lo siguiente:

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...

Alejandro Mesa

unread,
Jan 14, 2008, 8:59:01 PM1/14/08
to
Paco,

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

0 new messages