Estoy intentando lanzar un disparador cuando se actualice un campo.
Consiste en una lista de precios, que al actualizarse el precio, se comprueba si el nuevo precio modificado es superior a 1€, se registra esa modificación en otra tabla.
El código es este:
USE [PUBS]
GO
/****** Object: Trigger [dbo].[DSubidaPrecios] Script Date: 03/10/2009 20:27:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[DSubidaPrecios]
ON [dbo].[TLISTA_PRECIOS]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @PRECIO_NUEVO NUMERIC(8,2)
DECLARE @NOMBRE_CERVEZA VARCHAR(50)
DECLARE @BAR VARCHAR(50)
DECLARE @FECHA DATETIME;
SET @PRECIO_NUEVO = (SELECT PRECIO FROM UPDATED)
SET @NOMBRE_CERVEZA = (SELECT NOMBRE_CERVEZA FROM UPDATED)
SET @BAR = (SELECT nombre_bar FROM UPDATED)
SET @FECHA = GETDATE()
DECLARE @DIF_PRECIOS NUMERIC(8,2)
SET @DIF_PRECIOS = @PRECIO_NUEVO - (SELECT precio FROM tlista_precios
WHERE (nombre_cerveza = @NOMBRE_CERVEZA
AND
nombre_bar = @BAR)
)
IF UPDATE (PRECIO)
BEGIN
IF @DIF_PRECIOS > 1
BEGIN
INSERT INTO TSUBIDAS_PRECIOS VALUES (@BAR,@NOMBRE_CERVEZA,@PRECIO_NUEVO,@FECHA)
PRINT 'HOLA'
END
END
END
También lo he subido a pastebin:
http://mv.pastebin.com/f394536b0
Tengo dudas aquí:
SET @PRECIO_NUEVO = (SELECT PRECIO FROM UPDATED)
SET @NOMBRE_CERVEZA = (SELECT NOMBRE_CERVEZA FROM UPDATED)
SET @BAR = (SELECT nombre_bar FROM UPDATED)
Antes, en vez de UPDATED tenía INSERTED y no me lanzaba ningún error (pero tampoco me lanzaba el INSERT INTO en la otra tabla), y con UPDATED cuando intento actualizar me sale un error.