Trigger for update

07/09/2006 - 20:12 por Paco | Informe spam
Hola a todos.
Antes de nada decir que soy algo novato en sql y estoy haciendo mis primeros
pinitos.
Tengo una bbdd en sql 2005

Tengo las siguientes tablas
T1 : Unidades de medida
UnidadMedida - k

T2: Unidades de medida producto
Producto - k
UnidadMedida - k

T3: Precios proveedor
Proveedor - k
Producto - k
UnidadMedida -k

Tengo una relacion T1-T2 por el campo unidad de medida. Update on cascada

Tengo una relacion T2-T3 por los campos producto y unidad de medida. Update
no acction porque no me deja sql por otras relaciones.

He creado el siguiente trigger en T2 para mantener la integridad referencial

CREATE TRIGGER [U_COMUnidadesMedidaProducto_ProductoUM]
ON [COMUnidadesMedidaProducto]
FOR UPDATE
AS

IF NOT UPDATE(Producto) AND NOT UPDATE(UnidadMedida)
RETURN

declare @actUM varchar(20), @antUM varchar(20)
SELECT @actUM = UnidadMedida FROM Inserted
SELECT @antUM = UnidadMedida FROM Deleted

declare @actProducto varchar(20), @antProducto varchar(20)
SELECT @actProducto = Producto FROM Inserted
SELECT @antProducto = Producto FROM Deleted

UPDATE PreciosProductosProveedor
SET Producto = @actProducto, UnidadMedida = @actUM
FROM Inserted
WHERE PreciosProductosProveedor.Producto = @antProducto AND
PreciosProductosProveedor.UnidadMedida = @antUM

El trigger me funciona sólo para el primer producto que se modifica en T2.
Alguien me podría ayudar y decirme porque solo funciona para el primer
registro que modifica y como podría hacer para que me funcionase para todos
los registros.

Gracias a todos de antemano.
 

Leer las respuestas

#1 Antonio Soto
07/09/2006 - 21:50 | Informe spam
Hola Paco,

LAs líneas de asignación que tienes te devuelven solo un valor, por ejemplo
SELECT @actUM = UnidadMedida FROM Inserted
solo te devolvería el primer valor de la tabla inserted (los nuevos valores
de modificación)

Para resolverlo, al igual que estás añadiendo la talba Inserted en el update
para hacer el join, agrega también la tabla deleted.

Salud2



Antonio Soto
Solid Quality Learning
http://www.sqlu.com
Disclaimer: This communication is an original work and represents my sole
views on the subject. It does not represent the views of any other person
or entity either by inference or direct reference


"Paco" wrote in message
news:
Hola a todos.
Antes de nada decir que soy algo novato en sql y estoy haciendo mis
primeros
pinitos.
Tengo una bbdd en sql 2005

Tengo las siguientes tablas
T1 : Unidades de medida
UnidadMedida - k

T2: Unidades de medida producto
Producto - k
UnidadMedida - k

T3: Precios proveedor
Proveedor - k
Producto - k
UnidadMedida -k

Tengo una relacion T1-T2 por el campo unidad de medida. Update on cascada

Tengo una relacion T2-T3 por los campos producto y unidad de medida.
Update
no acction porque no me deja sql por otras relaciones.

He creado el siguiente trigger en T2 para mantener la integridad
referencial

CREATE TRIGGER [U_COMUnidadesMedidaProducto_ProductoUM]
ON [COMUnidadesMedidaProducto]
FOR UPDATE
AS

IF NOT UPDATE(Producto) AND NOT UPDATE(UnidadMedida)
RETURN

declare @actUM varchar(20), @antUM varchar(20)
SELECT @actUM = UnidadMedida FROM Inserted
SELECT @antUM = UnidadMedida FROM Deleted

declare @actProducto varchar(20), @antProducto varchar(20)
SELECT @actProducto = Producto FROM Inserted
SELECT @antProducto = Producto FROM Deleted

UPDATE PreciosProductosProveedor
SET Producto = @actProducto, UnidadMedida = @actUM
FROM Inserted
WHERE PreciosProductosProveedor.Producto = @antProducto AND
PreciosProductosProveedor.UnidadMedida = @antUM

El trigger me funciona sólo para el primer producto que se modifica en T2.
Alguien me podría ayudar y decirme porque solo funciona para el primer
registro que modifica y como podría hacer para que me funcionase para
todos
los registros.

Gracias a todos de antemano.


Preguntas similares