Good Receiveヘッダー、Good Receive Detailsテーブル、stockテーブルの3つのテーブルがあります
TB_GoodsReceive_HDR - Header Table
ID SupplierID
1 1
TB_GoodsReceive_DTL - Details Table
ID GR_HDR_ID ItemID WarehouseID ExpiryDate Qty
1 1 1 1 4/4/2012 20
2 1 2 1 4/4/2012 30
TB_Stock - Stock Table
ID ItemID WarehouseID ExpiryDate StockType GR_HDR_ID Qty
1 1 1 4/4/2012 R 1 20
1 2 1 4/4/2012 R 1 30
アイテム 1 – 20 個とアイテム 2 – 30 個を受け取りました。同じ私はそれを私の在庫テーブルに持っています。多くのシナリオがありますが、このシナリオのガイドラインが必要です
ユーザーが以下のように TB_GoodsReceive_DTL を更新すると、アイテムのみを更新します (ItemID 1 から ItemID 3 へ)
ID GR_HDR_ID ItemID WarehouseID ExpiryDate Qty
1 1 **3** 1 4/4/2012 20
2 1 2 1 4/4/2012 30
My stock table values should be as follows:
ID ItemID WarehouseID ExpiryDate StockType GR_HDR_ID Qty
1 **3** 1 4/4/2012 R 1 20
1 2 1 4/4/2012 R 1 30
しかし、以下のストアド プロシージャは、株式マスターの行を更新するのではなく、新しい行を挿入します。同様に、ユーザーは倉庫または有効期限を更新する可能性があります
以下の手順では、次のことを行います。
商品が受け取られるたびに、在庫テーブルのitemid、倉庫、有効期限がチェックされ、存在する場合はQTYが追加され、そうでない場合は在庫テーブルに新しいアイテムが挿入されます。
問題は、Good Receive テーブルが更新されるたびに (つまり、ユーザーが ItemId または Expiry Date または Warehouse を更新したとき)、在庫テーブルを更新する方法です。みんな助けてください、それは私の頭を壊します...
Declare
@ItemID int,
@WareHouseID int,
@Qty int,
@StockType nvarchar(30),
@ExpiryDate datetime,
@IsExistsItem int,
@IsExistsWH int,
@IsExistsExpiryDate int,
@IsGR_HDR_ID int,
@GR_HDR_ID int
set @ItemID=1
set @WareHouseID=2
set @Qty=20
set @StockType='R'
set @GR_HDR_ID=2
set @ExpiryDate = '4/4/2012 12:00:00 AM'
set @IsExistsItem = (select count(ItemID) from TB_Stock_Details where
ItemID=@ItemID)
set @IsExistsWH = (select count(WareHouseID) from TB_Stock_Details where
WareHouseID=@WareHouseID)
set @IsExistsExpiryDate = (select count(ExpiryDate) from TB_Stock_Details where
ExpiryDate=@ExpiryDate)
if(@StockType='R')
begin
IF (@IsExistsItem>0) and (@IsExistsWH>0) and (@IsExistsExpiryDate>0)
BEGIN
UPDATE TB_Stock_Details
SET
Qty =Qty + @Qty
WHERE ItemID = @ItemID and GR_HDR_ID = @GR_HDR_ID
END
ELSE
begin
INSERT INTO TB_Stock_Details(ItemID,WareHouseID,Qty,StockType,ExpiryDate)
VALUES(@ItemID,@WareHouseID,@Qty,@StockType,@ExpiryDate)
end
end