Consulta de Trigger

05/01/2006 - 00:23 por Wilfredo Chacon | Informe spam
Como hago para crear un trigger que elimine en cascada los registros
relacionados...

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
05/01/2006 - 00:33 | Informe spam
Por qué deseas hacerlo con un trigger? Es más eficiente si aplicas a tus
tablas restricciones FOREIGN KEY de la forma:

FOREIGN KEY REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]

De todas formas, si insistes en usar triggers para eliminar registros en
cascada, usa CREATE TRIGGER y programa adecuadamente lo que deseas hacer.

Los detalles de todo esto los puedes leer en tus Books Online (BOL), si hay
algo específico que no entiendas, vuelves y nos lo dices y veremos cómo
ayudarte.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Wilfredo Chacon" wrote in message
news:
Como hago para crear un trigger que elimine en cascada los registros
relacionados...


Respuesta Responder a este mensaje
#2 Wilfredo Chacon
05/01/2006 - 00:51 | Informe spam
Ok, eso no lo sabia entonces te explico a ver si me ayudas.
Tengo dos tablas una que se llama ordenes que por supuesto tiene el campo
llave idorden y otra tabla que se llama detalle_orden que tambien posee el
campo idorden entonces lo que necesito es que cuando elimine un registro en
la tabla ordenes se eliminen en cascada los registros que le corresponden en
la tabla detalle_orden.

como debo utilizar FOREIGN KEY para poder hacer este proceso.

Te agradesco tu ayuda..
"Gustavo Larriera [MVP]" escribió en el mensaje
news:#
Por qué deseas hacerlo con un trigger? Es más eficiente si aplicas a tus
tablas restricciones FOREIGN KEY de la forma:

FOREIGN KEY REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]

De todas formas, si insistes en usar triggers para eliminar registros en
cascada, usa CREATE TRIGGER y programa adecuadamente lo que deseas hacer.

Los detalles de todo esto los puedes leer en tus Books Online (BOL), si


hay
algo específico que no entiendas, vuelves y nos lo dices y veremos cómo
ayudarte.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Wilfredo Chacon" wrote in message
news:
> Como hago para crear un trigger que elimine en cascada los registros
> relacionados...
>
>


Respuesta Responder a este mensaje
#3 Gustavo Larriera [MVP]
05/01/2006 - 01:27 | Informe spam
Usa una sentencia CREATE TABLE Orden con la declaración FOREIGN KEY
(idorden) REFERENCES Detalle_orden(idorden) ON DELETE CASCADE.

Como te dije en el mensaje anterior, los detalles los debes leer tú mismo en
los Books Online (BOL).

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Wilfredo Chacon" wrote in message
news:%
Ok, eso no lo sabia entonces te explico a ver si me ayudas.
Tengo dos tablas una que se llama ordenes que por supuesto tiene el campo
llave idorden y otra tabla que se llama detalle_orden que tambien posee el
campo idorden entonces lo que necesito es que cuando elimine un registro
en
la tabla ordenes se eliminen en cascada los registros que le corresponden
en
la tabla detalle_orden.

como debo utilizar FOREIGN KEY para poder hacer este proceso.

Te agradesco tu ayuda..
"Gustavo Larriera [MVP]" escribió en el mensaje
news:#
Por qué deseas hacerlo con un trigger? Es más eficiente si aplicas a tus
tablas restricciones FOREIGN KEY de la forma:

FOREIGN KEY REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]

De todas formas, si insistes en usar triggers para eliminar registros en
cascada, usa CREATE TRIGGER y programa adecuadamente lo que deseas hacer.

Los detalles de todo esto los puedes leer en tus Books Online (BOL), si


hay
algo específico que no entiendas, vuelves y nos lo dices y veremos cómo
ayudarte.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers
no rights.

"Wilfredo Chacon" wrote in message
news:
> Como hago para crear un trigger que elimine en cascada los registros
> relacionados...
>
>






Respuesta Responder a este mensaje
#4 Wilfredo Chacon
05/01/2006 - 01:48 | Informe spam
Te lo agredesco y es que lo pasa es que apenas empiezo..
Gracias me ha servido de mucho.

"Gustavo Larriera [MVP]" escribió en el mensaje
news:#$
Usa una sentencia CREATE TABLE Orden con la declaración FOREIGN KEY
(idorden) REFERENCES Detalle_orden(idorden) ON DELETE CASCADE.

Como te dije en el mensaje anterior, los detalles los debes leer tú mismo


en
los Books Online (BOL).

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Wilfredo Chacon" wrote in message
news:%
> Ok, eso no lo sabia entonces te explico a ver si me ayudas.
> Tengo dos tablas una que se llama ordenes que por supuesto tiene el


campo
> llave idorden y otra tabla que se llama detalle_orden que tambien posee


el
> campo idorden entonces lo que necesito es que cuando elimine un registro
> en
> la tabla ordenes se eliminen en cascada los registros que le


corresponden
> en
> la tabla detalle_orden.
>
> como debo utilizar FOREIGN KEY para poder hacer este proceso.
>
> Te agradesco tu ayuda..
> "Gustavo Larriera [MVP]" escribió en el


mensaje
> news:#
>> Por qué deseas hacerlo con un trigger? Es más eficiente si aplicas a


tus
>> tablas restricciones FOREIGN KEY de la forma:
>>
>> FOREIGN KEY REFERENCES ref_table [ ( ref_column ) ]
>> [ ON DELETE { CASCADE | NO ACTION } ]
>> [ ON UPDATE { CASCADE | NO ACTION } ]
>>
>> De todas formas, si insistes en usar triggers para eliminar registros


en
>> cascada, usa CREATE TRIGGER y programa adecuadamente lo que deseas


hacer.
>>
>> Los detalles de todo esto los puedes leer en tus Books Online (BOL), si
> hay
>> algo específico que no entiendas, vuelves y nos lo dices y veremos cómo
>> ayudarte.
>>
>> Gustavo Larriera
>> Uruguay LatAm
>> Blog: http://sqljunkies.com/weblog/gux/
>> MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
>> Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga


ningun
>> derecho / This posting is provided "AS IS" with no warranties, and
>> confers
>> no rights.
>>
>> "Wilfredo Chacon" wrote in message
>> news:
>> > Como hago para crear un trigger que elimine en cascada los registros
>> > relacionados...
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#5 Alejandro Mesa
05/01/2006 - 15:30 | Informe spam
Wilfredo,

Quiero agregar a lo dicho por Gustavo, que si vas a programar el borrado en
cascada mediante un trigger, entonces debes eliminar del todo la restriccion
de clave foranea si el trigger es un "after trigger", no asi si usas un
"instead of trigger". Esto se debe a que la restriccion de clave foranea es
chequeada antes de que se dispare el "after trigger", por lo que al querer
borrar una fila padre, SQL Server chequeara la restriccion de clave foranea y
dara error, sin dar lugar a que se dispare el trigger.

Ejemplo:

use northwind
go

create table t1(c1 int not null unique)
go

create table t2(c1 int not null references t1(c1))
go

insert into t1 values(1)
insert into t1 values(2)
go

insert into t2 values(1)
insert into t2 values(2)
go

create trigger tr_t1_del on t1
after delete
as

delete a
from t2 as a inner join deleted as d
on a.c1 = d.c1
go

delete t1
where c1 = 1
go

select * from t1
select * from t2
go

drop trigger tr_t1_del
go

create trigger tr_t1_io_del on t1
instead of delete
as

begin transaction

delete a
from t2 as a inner join deleted as d
on a.c1 = d.c1

delete a
from t1 as a inner join deleted as d
on a.c1 = d.c1

commit transaction
go

delete t1
where c1 = 1
go

select * from t1
select * from t2
go

drop table t2, t1
go

Recuerda siempre usar control de errores en el codigo. Yo no lo hago aqui
por vago.


AMB



"Gustavo Larriera [MVP]" wrote:

Por qué deseas hacerlo con un trigger? Es más eficiente si aplicas a tus
tablas restricciones FOREIGN KEY de la forma:

FOREIGN KEY REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]

De todas formas, si insistes en usar triggers para eliminar registros en
cascada, usa CREATE TRIGGER y programa adecuadamente lo que deseas hacer.

Los detalles de todo esto los puedes leer en tus Books Online (BOL), si hay
algo específico que no entiendas, vuelves y nos lo dices y veremos cómo
ayudarte.

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Wilfredo Chacon" wrote in message
news:
> Como hago para crear un trigger que elimine en cascada los registros
> relacionados...
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida