Crear Update Trigger en SQL

Estoy utilizando SQL Express 2005.
Tengo un desencadenante que se llama "Paquetes.Insertar" en la tabla "DetallePedido" y éste funciona bien agregando los registros correspondientes en la tabla DetallePaquetePedido", el código es el siguiente:
CREATE TRIGGER [dbo].[Paquetes.Insertar] ON [dbo].[detallepedido]FOR INSERT AS DECLARE @IdDetalle int, @IdPaquete int, @Cantidad Int
SET @IdDetalle = (SELECT IdDetallePed FROM inserted)
SET @IdPaquete = (SELECT IdArticulo FROM Inserted)
SET @Cantidad = (SELECT Cantidad FROM Inserted)

INSERT INTO dbo.DetallePaquetesPedidos (IdDetalle,IdPaquete,IdArticulo,Cantidad) SELECT @IdDetalle AS IdDetalle, @IdPaquete AS IdPaquete, idarticulo, cantidad * @Cantidad AS Cantidad FROM detallecatarticulos WHERE (idpadre = @IdPaquete)
Estoy intentando crear otro desencadenante que se llame "Paquetes.Actualizar" y el código es el siguiente:
CREATE TRIGGER [dbo].[Paquetes.Actualizar] ON [dbo].[detallepedido] FOR UPDATE
AS
DECLARE @IdDetalleDel int,@IdDetalleIns int, @IdPaquete int, @Cantidad Int

SET @IdDetalleDel = (SELECT IdDetallePed FROM Deleted)
DELETE FROM dbo.DetallePaquetesPedidos WHERE (IdDetalle = @IdDetalleDel)
GO

SET @IdDetalleIns = (SELECT IdDetallePed FROM Inserted)
SET @IdPaquete = (SELECT IdArticulo FROM Inserted)
SET @Cantidad = (SELECT Cantidad FROM Inserted)

INSERT INTO dbo.DetallePaquetesPedidos (IdDetalle,IdPaquete,IdArticulo,Cantidad) SELECT @IdDetalleIns AS IdDetalle, @IdPaquete AS IdPaquete, idarticulo, cantidad * @Cantidad AS Cantidad FROM dbo.detallecatarticulos WHERE (idpadre = @IdPaquete)
GO

Pero me marca los siguientes errores:
Mens. 137, Nivel 15, Estado 1, Lnea 2
Debe declarar la variable escalar "@IdDetalleIns".

Mens. 137, Nivel 15, Estado 1, Lnea 3
Debe declarar la variable escalar "@IdPaquete".

Mens. 137, Nivel 15, Estado 1, Lnea 4
Debe declarar la variable escalar "@Cantidad".

Mens. 137, Nivel 15, Estado 2, Lnea 6
Debe declarar la variable escalar "@IdDetalleIns".

¿Por qué me marca estos errores? Y ¿Cuál es el código correcto?
De antemano gracias.
{"Lat":20.5710818935082,"Lng":-100.4150390625}

1 respuesta

Respuesta
1
Tú mism@ puedes ver la diferencia. En la primera secuencia no tienes introducido ningún GO y en la segunda sí.
Los GO hacen que las variables "dejen de existir". Suprime esos GO y todo irá bien.
Gracias por tu respuesta, no sabía que con el comando "GO" se liberan las variables, ya corregí el desencadenante y elimine los comandos "GO" pero todavía hay un error que dice "La subconsulta ha devuelto más de un valor lo que no es correcto cuando va a continuación de =, !<, <, <=, >,>= o cuando se utiliza como expresión"
¿Sabes a que se debe este error?
Gracias.
A ver si en la asignación de variables existe la posibilidad de que haya más de una coincidencia.
Es decir, en el código
SET @IdDetalleDel = (SELECT IdDetallePed FROM Deleted)
Que no haya más de un IdDetallePed en la tabla Deleted (en cuanto haya 2 o más datos ya te saldrá el error que me relatas)
... y así con todas las asignaciones a variables que haces.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas