This is the Trigger which is not working properly during Update, no any
record is going to be updated so pls help.
I am updating the requisition table when any update in quantity in
podetails table
CREATE TRIGGER trig_updateRequistion ON ERP.DBO.TranPurchaseOrderDetail
INSTEAD OF UPDATE
AS
IF UPDATE(Quantity)
BEGIN
Update RequisitionSlipDetail
set RequisitionSlipDetail.PoQuantity =
(Select PoQuantity from RequisitionSlipDetail where
ItemCode=(Select CAST(i.ItemCode as nvarchar(20)) from inserted as i)
and
RSlip_No=(Select CAST(i.RSlip_No as int) from inserted as i)
)
-
((Select Quantity from TranPurchaseOrderDetail where Purchase_OrderNo
=
(Select CAST(i.Purchase_OrderNo as nvarchar(20)) from inserted as i))
- (Select CAST(i.Quantity as int) from inserted as i))
where RequisitionSlipDetail.ItemCode = (Select CAST(i.ItemCode as
nvarchar(20)) from inserted as i) and RequisitionSlipDetail.RSlip_No =
(Select CAST(i.RSlip_No as int) from inserted as i)
Update TranPurchaseOrderDetail set
TranPurchaseOrderDetail.Quantity =
(Select CAST(i.Quantity as int) from inserted as i)
where TranPurchaseOrderDetail.Purchase_OrderNo = (Select
CAST(i.Purchase_OrderNo as nvarchar(20)) from inserted as i)
and
TranPurchaseOrderDetail.ItemCode = (Select CAST(i.ItemCode as
nvarchar(20)) from inserted as i)
and
TranPurchaseOrderDetail.PurchaseDetailId =
(Select PurchaseDetailId from TranPurchaseOrderDetail where
Purchase_OrderNo = (Select CAST(i.Purchase_OrderNo as nvarchar(20))
from inserted as i))
ENDsantoshborfalkar (santosh.borfalkar@.gmail.com) writes:
Quote: Originally Posted by This is the Trigger which is not working properly during Update, no any record is going to be updated so pls help. > I am updating the requisition table when any update in quantity in podetails table |
It's very difficult to tell what might be wrong without any knowledge of
your tables or the business rules.
But I noted a few things that appears ood.
Quote: Originally Posted by CREATE TRIGGER trig_updateRequistion ON ERP.DBO.TranPurchaseOrderDetail INSTEAD OF UPDATE AS IF UPDATE(Quantity) |
So if the Quantity columns is not mentioned in the SET clause, then you
will not perform any update at all?
Quote: Originally Posted by Update RequisitionSlipDetail set RequisitionSlipDetail.PoQuantity = > (Select PoQuantity from RequisitionSlipDetail where ItemCode=(Select CAST(i.ItemCode as nvarchar(20)) from inserted as i) |
This may work, if only one row at a time is updated, but it will fail
with an error if many rows are updated. Recall that triggers fire once
per statement, not once per row.
Quote: Originally Posted by Update TranPurchaseOrderDetail set TranPurchaseOrderDetail.Quantity = (Select CAST(i.Quantity as int) from inserted as i) where TranPurchaseOrderDetail.Purchase_OrderNo = (Select CAST(i.Purchase_OrderNo as nvarchar(20)) from inserted as i) and TranPurchaseOrderDetail.ItemCode = (Select CAST(i.ItemCode as nvarchar(20)) from inserted as i) and TranPurchaseOrderDetail.PurchaseDetailId = (Select PurchaseDetailId from TranPurchaseOrderDetail where Purchase_OrderNo = (Select CAST(i.Purchase_OrderNo as nvarchar(20)) from inserted as i)) |
I don't understand this casting business. Why cast the columns of "inserted"
when they are the same as in the target table? A simplified version of
the above could be:
Update TranPurchaseOrderDetail
set Quantity = i.Quantity
FROM TranPurchaseOrderDetail T
JOIN inserted i ON T.Purchase_OrderNo = i.Purchase_OrderNo
AND T.ItemCode = i.ItemCode
and T.PurchaseDetailId =
Quote: Originally Posted by (Select PurchaseDetailId from TranPurchaseOrderDetail where Purchase_OrderNo = (Select CAST(i.Purchase_OrderNo as nvarchar(20)) from inserted as i)) |
I did not rewrite the last bit, because, frankly, I don't understand what
it's supposed to mean. It just looks strange.
--
Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pr...oads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodin...ions/books.mspx