error con Trigger - haber quien lo arregla xD!!!
Publicado por Juanjo (1 intervención) el 30/10/2008 23:59:17
hola gente del foro xD!!!
estaba intentando en al BD nordwind la siguiente sentencia, cuando insertar un registro con el codigo del producto repetido quiero q se actulice solo la cantidad del producto en la tabla [Order Details] hasta aqui todo bien, pero primero hay q insertar esto
insert into Orders (CustomerID,EmployeeID) values ('ALFKI',2) -- donde ORDERID es 11080 (es el valor por defecto q sigue en la BD )
DECLARE @ORDERID INT, @PCTO INT, @REP INT,
@UnitPrice MONEY, @QuantityNUEVA SMALLINT, @QuantityANTIGUA SMALLINT, @Discount REAL
SET @ORDERID = 11080
SET @PCTO = 5
SET @UnitPrice = 200
SET @QuantityNUEVA = 10
SET @QuantityANTIGUA = ( SELECT Quantity FROM [Order Details]
WHERE OrderID = @ORDERID AND ProductID = @PCTO)
SET @Discount = 0
SET @REP = ( SELECT COUNT(*) FROM [Order Details]
WHERE OrderID = @ORDERID AND ProductID = @PCTO)
IF @REP = 1
BEGIN
UPDATE [Order Details] SET Quantity = (@QuantityANTIGUA + @QuantityNUEVA)
WHERE OrderID = @ORDERID AND ProductID = @PCTO
END
IF @REP = 0
BEGIN
INSERT [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (@ORDERID,@PCTO,@UnitPrice,@QuantityNUEVA,@Discount)
END
SELECT * FROM [Order Details] WHERE OrderID = 11080
SELECT * FROM dbo.Orders WHERE OrderID = 11080
/*******************************************************************************************
bien ahora el problema es q eh trato de pasar esto a un trigger , aqui ta el ejemplo
*********************************************************************************************/
ALTER TRIGGER ACTUALIZA_CANT_PCTO
ON [Order Details] FOR INSERT AS
DECLARE @ORDERID INT, @PCTO INT, @REP INT,
@UnitPrice MONEY, @QuantityNUEVA SMALLINT,
@QuantityANTIGUA SMALLINT, @Discount REAL
SELECT @ORDERID = I.OrderID,
@PCTO = I.ProductID,
@UnitPrice = I.UnitPrice,
@QuantityNUEVA = I.Quantity,
@Discount = I.Discount
FROM INSERTED AS I
SET @QuantityANTIGUA = (SELECT Quantity FROM [Order Details]
WHERE OrderID = @ORDERID AND ProductID = @PCTO)
SET @REP = ( SELECT COUNT(*) FROM [Order Details]
WHERE OrderID = @ORDERID AND
ProductID = @PCTO)
IF @REP = 1
BEGIN
UPDATE [Order Details] SET Quantity = (@QuantityNUEVA + @QuantityANTIGUA)
WHERE OrderID = @ORDERID AND ProductID = @PCTO
END
IF @REP = 0
BEGIN
INSERT [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (@ORDERID,@PCTO,@UnitPrice,@QuantityNUEVA,@Discount)
END
/*******************************************************************************************
el problema me sale es q al insertar un registro nuevo me sale q no puedo insertar registros duplicados, y el otro poblema es q al insertar el primer registro me da como resultado q la cantiad q puse no es uno (1) si no (2) es decir se duplica
INSERT [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (11080,1,100,1,0)
SELECT * FROM [Order Details] WHERE OrderID = 11080
*********************************************************************************************/
haber quien me da una manito , cualquier ayuda o idea 100 ayuda
estaba intentando en al BD nordwind la siguiente sentencia, cuando insertar un registro con el codigo del producto repetido quiero q se actulice solo la cantidad del producto en la tabla [Order Details] hasta aqui todo bien, pero primero hay q insertar esto
insert into Orders (CustomerID,EmployeeID) values ('ALFKI',2) -- donde ORDERID es 11080 (es el valor por defecto q sigue en la BD )
DECLARE @ORDERID INT, @PCTO INT, @REP INT,
@UnitPrice MONEY, @QuantityNUEVA SMALLINT, @QuantityANTIGUA SMALLINT, @Discount REAL
SET @ORDERID = 11080
SET @PCTO = 5
SET @UnitPrice = 200
SET @QuantityNUEVA = 10
SET @QuantityANTIGUA = ( SELECT Quantity FROM [Order Details]
WHERE OrderID = @ORDERID AND ProductID = @PCTO)
SET @Discount = 0
SET @REP = ( SELECT COUNT(*) FROM [Order Details]
WHERE OrderID = @ORDERID AND ProductID = @PCTO)
IF @REP = 1
BEGIN
UPDATE [Order Details] SET Quantity = (@QuantityANTIGUA + @QuantityNUEVA)
WHERE OrderID = @ORDERID AND ProductID = @PCTO
END
IF @REP = 0
BEGIN
INSERT [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (@ORDERID,@PCTO,@UnitPrice,@QuantityNUEVA,@Discount)
END
SELECT * FROM [Order Details] WHERE OrderID = 11080
SELECT * FROM dbo.Orders WHERE OrderID = 11080
/*******************************************************************************************
bien ahora el problema es q eh trato de pasar esto a un trigger , aqui ta el ejemplo
*********************************************************************************************/
ALTER TRIGGER ACTUALIZA_CANT_PCTO
ON [Order Details] FOR INSERT AS
DECLARE @ORDERID INT, @PCTO INT, @REP INT,
@UnitPrice MONEY, @QuantityNUEVA SMALLINT,
@QuantityANTIGUA SMALLINT, @Discount REAL
SELECT @ORDERID = I.OrderID,
@PCTO = I.ProductID,
@UnitPrice = I.UnitPrice,
@QuantityNUEVA = I.Quantity,
@Discount = I.Discount
FROM INSERTED AS I
SET @QuantityANTIGUA = (SELECT Quantity FROM [Order Details]
WHERE OrderID = @ORDERID AND ProductID = @PCTO)
SET @REP = ( SELECT COUNT(*) FROM [Order Details]
WHERE OrderID = @ORDERID AND
ProductID = @PCTO)
IF @REP = 1
BEGIN
UPDATE [Order Details] SET Quantity = (@QuantityNUEVA + @QuantityANTIGUA)
WHERE OrderID = @ORDERID AND ProductID = @PCTO
END
IF @REP = 0
BEGIN
INSERT [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (@ORDERID,@PCTO,@UnitPrice,@QuantityNUEVA,@Discount)
END
/*******************************************************************************************
el problema me sale es q al insertar un registro nuevo me sale q no puedo insertar registros duplicados, y el otro poblema es q al insertar el primer registro me da como resultado q la cantiad q puse no es uno (1) si no (2) es decir se duplica
INSERT [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)
VALUES (11080,1,100,1,0)
SELECT * FROM [Order Details] WHERE OrderID = 11080
*********************************************************************************************/
haber quien me da una manito , cualquier ayuda o idea 100 ayuda
Valora esta pregunta


0