内容如下:
有三个表,Proudct(货物),Order(订单),OrderProductList(货物跟订单的对照表)。
即当一个用户选择了几种货物,每种选择了若干个,然后下订,就在Order里产生一个订单,假若选择了N种货物,就在OrderProductList里产生N条记录,OrderProductList表里,有字段OrderID, ProductID, Count,分别记录了订单号,货物号和订购的数量,即记录了某一订单的某一货物的数量,当产生一个订单时,这个订单所包含的货物在会从Product中提取,即Product表中对应种类的货物会减少对应的数量。
好了问题如下:
当一个订单取消时,这个订单的货物应该回到Product表中去,即Product表中对应货物的数量应该增加。因为一个订单包含的OrderPrudct记录有多条,那么我删除一个订单时(订单取消),这些OrderProductList里的货物怎么样使用一次更新的办法全部回到Product里呢?我使用过下面这条语句,但行不通。请各位帮忙。UPDATE Product
SET AmountWhole = AmountWhole +
          (SELECT [OrderProductList].[Amount]
         FROM [OrderProductList]
         WHERE [OrderProductList].[OrderID] = 52)
WHERE (ID IN
          (SELECT [OrderProductList].[ProductID]
         FROM [OrderProductList]
         WHERE [OrderProductList].[OrderID] = 52))其中52为订单号

解决方案 »

  1.   

    try something like (didn't test, so might not work):update Product set AmountWhole = AmountWhole + op.[Amount]
    from Product p 
    Inner join [OrderProductList] op
    On p.[ProductID] = op.[ProductID]
    where op.[OrderID] = 52
      

  2.   

    --创建存储过程,传入OrderID就可以了
    create procedure Cancel_Product
    (
    @OrderID  varchar(100)
    )
    AS
    BEGIN
    SET NOCOUNT ON
    begin tran
    begin
    update Product set AmountWhole=AmountWhole+Count from Product a,OrderProductList b
    where a.ProductID=b.ProductID  and b.OrderID=@OrderID
    end
    begin
    delete from OrderProductList where OrderID=@OrderID 
    end
    commit tran
    IF @@ERROR <> 0 
    rollback tran
    end
    go--调用
    exec Cancel_Product '52'--因为考虑到取消时可能会失败,所以要加事物,已调试通过,需根据具体情况再少做修改即可。