Eliminar datos en otra tabla por medio de un trigger

19/01/2007 - 15:36 por manuelpatricio.sandovalcaro | Informe spam
Hola a todos!!
parto por agradecer el tiempo que le puedan dedicar a mi problema!!!

Les cuento en que consiste la situación...

Tengo una tabla en la cual se registra información referente a compra
de productos, por medio de un trigger de inserción envío una copia de
estos datos, para un proceso de calculo en el cual convierto algunos de
los datos.
Esto se realiza sin ningún problema y mi tabla secundaria se esta
poblando sin problemas, y puedo hacer mis calculos sin problema.

El problema se presenta cuando se eliminan los datos de la tabla
maestra, necesito también que se eliminen de la tabla de control.
probe creando el trigger de distintas formas, pero no me resulta, no
realiza ningún proceso.


Este es el código del trigger de eliminación


CREATE TRIGGER [Tr_Del_MovLot_Tbl_MovSacos] ON [dbo].[MOVLOT]
FOR DELETE
AS
Declare @Bodega int, @SacosE float, @SacosS float, @PesoE float, @PesoS
float, @Tipo int, @Cod int,
@Fecha datetime, @Lote char(10), @Num float, @Sec int



Set @Tipo = (Select TmeTip From Deleted)
Set @Cod = (Select TmeCod From Deleted)
Set @Lote = (Select DmoLotNum From Deleted)
Set @Fecha = (Select DmoLotMov From Deleted)
Set @Num = (Select MovNumDoc From Deleted)
Set @Sec = (Select DmoNumSec From Deleted)

Set @Bodega = (Select DmoBodCod From InvMov1 T1 Where T1.TmeTip @Tipo And T1.TmeCod = @Cod And T1.MovNumDoc = @Num And T1.DmoNumSec @Sec)

Delete From Tvl_MovSacos
Where TmeTip = @Tipo
And TmeCod = @Cod
And Lote = @Lote
And NumDoc = @Num
And BodCod = @Bodega
And Fecha = @Fecha

Go
gracias!!!
 

Leer las respuestas

#1 Javier Loria
19/01/2007 - 16:20 | Informe spam
Hola Manuel:
Un problema que tienes en tu codigo es que asumes que DELETED es una
fila, pero lo cierto es una tabla que puede tener muchas columnas. Esto lo
puedes ver cuando haces por ejemplo: Set @Tipo = (Select TmeTip From
Deleted)
Cual de todas las filas se usara para seleccionar el tipo? La primera.
la ultima?
En triggers tienes que escribir el codigo mas o menos asi:
CREATE TRIGGER [Tr_Del_MovLot_Tbl_MovSacos] ON [dbo].[MOVLOT]
FOR DELETE
AS
DELETE
FROM Tvl_MovSacos
JOIN Deleted
ON Tvl_MovSacos.TmeTip =Deleted.TmeTip
AND Tvl_MovSacos.TmeCod =Deleted.TmeCod
AND Tvl_MovSacos.Lote =Deleted.DmoLotNum
AND Tvl_MovSacos.NumDoc =Deleted.MovNumDoc
JOIN InvMov1
ON InvMov1.TmeTip = Deleted.TmeTip
AND InvMov1.TmeCod = Deleted.TmeCod
AND InvMov1.MovNumDoc = Deleted.MovNumDoc
AND InvMov1.DmoNumSec = Deleted.DmoNumSec
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

wrote in message
news:
Hola a todos!!
parto por agradecer el tiempo que le puedan dedicar a mi problema!!!

Les cuento en que consiste la situación...

Tengo una tabla en la cual se registra información referente a compra
de productos, por medio de un trigger de inserción envío una copia de
estos datos, para un proceso de calculo en el cual convierto algunos de
los datos.
Esto se realiza sin ningún problema y mi tabla secundaria se esta
poblando sin problemas, y puedo hacer mis calculos sin problema.

El problema se presenta cuando se eliminan los datos de la tabla
maestra, necesito también que se eliminen de la tabla de control.
probe creando el trigger de distintas formas, pero no me resulta, no
realiza ningún proceso.


Este es el código del trigger de eliminación


CREATE TRIGGER [Tr_Del_MovLot_Tbl_MovSacos] ON [dbo].[MOVLOT]
FOR DELETE
AS
Declare @Bodega int, @SacosE float, @SacosS float, @PesoE float, @PesoS
float, @Tipo int, @Cod int,
@Fecha datetime, @Lote char(10), @Num float, @Sec int



Set @Tipo = (Select TmeTip From Deleted)
Set @Cod = (Select TmeCod From Deleted)
Set @Lote = (Select DmoLotNum From Deleted)
Set @Fecha = (Select DmoLotMov From Deleted)
Set @Num = (Select MovNumDoc From Deleted)
Set @Sec = (Select DmoNumSec From Deleted)

Set @Bodega = (Select DmoBodCod From InvMov1 T1 Where T1.TmeTip @Tipo And T1.TmeCod = @Cod And T1.MovNumDoc = @Num And T1.DmoNumSec @Sec)

Delete From Tvl_MovSacos
Where TmeTip = @Tipo
And TmeCod = @Cod
And Lote = @Lote
And NumDoc = @Num
And BodCod = @Bodega
And Fecha = @Fecha

Go
gracias!!!

Preguntas similares