Desactivar restricciones de clave externa y triggers

14/01/2008 - 11:50 por Paco | Informe spam
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.

Preguntas similare

Leer las respuestas

#1 Maxi
14/01/2008 - 14:12 | Informe spam
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:
"Paco" escribió en el mensaje
news:
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

que me podrían quedar algunos registros mal, pero no es ningún problema.

Muchas gracias por anticipado.
Respuesta Responder a este mensaje
#2 Paco
14/01/2008 - 15:30 | Informe spam
Gracias por la respuesta.

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

"Maxi" wrote:

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:
"Paco" escribió en el mensaje
news:
> 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.



Respuesta Responder a este mensaje
#3 qwalgrande
14/01/2008 - 17:38 | Informe spam
Hola.

Sí, es una instrucción muy parecida:

alter table [tutabla] nocheck constraint all

Alberto López Grande



"Paco" wrote:

Gracias por la respuesta.

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

"Maxi" wrote:

> 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:
> "Paco" escribió en el mensaje
> news:
> > 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.
>
>
>
Respuesta Responder a este mensaje
#4 Jesús López
14/01/2008 - 17:50 | Informe spam
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" escribió en el mensaje
news:
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

que me podrían quedar algunos registros mal, pero no es ningún problema.

Muchas gracias por anticipado.
Respuesta Responder a este mensaje
#5 Alejandro Mesa
15/01/2008 - 02:59 | Informe spam
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

"Paco" wrote:

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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida