hola grupo
tengo el siguiente problema que pense ke sería fácil resolver:
Lo que quiero hacer es que tras marcar modificar el campo vitrina a 1
en la tabla Bolsa los registros de la tabla Prendas relacionados con
el registro en la tabla bolsa se "muevan"(entre comillas) a otra tabla
Productos pero ese "movimiento" en realidad significa que las tengo
que eliminar de la tabla Prendas y luego insertarlos en la tabla
Productos.
Para lo anterior pensé ke sería buena idea tener dos desencadenadores
uno el la tabla Bolsa en el UPDATE y otra en la tabla Prendas en el
DELETE de tal forma que el UPDATE elimine los registros en la tabla
Prendas que desencadenará el desencadenante DELETE en la tabla Prendas
pero el problema que tengo es que cuando se dispara el desencadenante
DELETE en la tabla del trigger "deleted" están todos los registros que
se eliminaron y es ahí donde no sé como puedo iterar en cada registro
de la tabla "deleted" no quiero utilizar cursores porke no los sé
utilizar y ademas he leido que no son buenos porke consumen muchos
recursos y son más lentos (Bueno eso se dice "mito urbano")
este es mi primer desencadenador el UPDATE que elimina registros en la
tabla Prendas:
ALTER TRIGGER [dbo].[BolsaVitrina]
ON [dbo].[Bolsa]
after UPDATE
AS
BEGIN
IF UPDATE(vitrina)--aqui veo si se modifico el campo vitrina
begin
if (select inserted.vitrina from inserted) = 1 --aqui determino si
el campo vitrina cambio a su estado a 1
begin
relacionados entre la tabla bolsa y prendas (1 a muchos)
delete from Prenda where id_bolsa = (select id_bolsa from
inserted)-
end
end
END
este es mi segundo desencadenante que se dispara al eliminar los
registros en la tabla Prendas y los inserta en la tabla Productos ( y
porke bueno porke las Prendas se convertirán en Productos para la
compañía)
alter TRIGGER EliminarPrendas
ON Prenda
AFTER DELETE
AS
BEGIN
IF (SELECT COUNT(deleted.id) FROM deleted) > 0 --aki solo pregunto si
hay registros en la tabla deleted
begin
trigger se dispararía por cada registro
eliminados y eso está bien pero no sé como
otra forma se los agradesería que mo lo
declare @id_bolsa as int
declare @descgramos as int
declare @kilates as int
declare @gramos as int
declare @calidad nvarchar(10)
declare @detelles nvarchar(100)
select @id_bolsa = deleted.id_bolsa
,@descgramos = deleted.Desc_prenda
,@kilates = deleted.Ktes
,@gramos = deleted.Grms
,@calidad = deleted.Calidad
,@detelles = deleted.[Detalles de Prenda]
from deleted
INSERT INTO [db2].[dbo].[TblProductos]
([id_bolsa]
,[descuento_gramos]
,[kilates]
,[gramos]
,[calidad]
,[detalles])
VALUES
(@id_bolsa
,@descgramos
,@kilates
,@gramos
,@calidad
,@detelles)
end
END
GO
otra cosa no sé si existe el FOREACH
Leer las respuestas