truncate table KnWarehouseItem
insert into KnWarehouseItem
select warehouseid,itemid,sum(stockqty) as qty   from knmatlstock group by warehouseid,itemid

解决方案 »

  1.   

    CREATE PROCEDURE KnMaterialNum_Ontime
    ASSET NOCOUNT ONBEGIN TRANdelete KnWarehouseIteminsert into KnWarehouseItem(itemid,knWarehouseID,CurrentQty)
    select warehouseid,itemid,sum(stockqty) from knmatlstock 
    group by warehouseid,itemidCOMMIT TRAN
    SET NOCOUNT OFFGO
      

  2.   

    --最佳简化:CREATE PROCEDURE KnMaterialNum_Ontime
    AS
    SET NOCOUNT ON
    BEGIN TRAN
        insert into KnWarehouseItem(itemid,knWarehouseID,CurrentQty)
    select warehouseid,itemid,sum(stockqty) as qty 
    from knmatlstock 
    group by warehouseid,itemidCOMMIT TRAN
    SET NOCOUNT OFF
    GO
      

  3.   

    使用select into来出来两个表间的数据导入导出
      

  4.   

    --最佳简化(上面没有清除原表):CREATE PROCEDURE KnMaterialNum_Ontime
    AS
    SET NOCOUNT ON
    BEGIN TRAN
        truncate table KnWarehouseItem  --这样删除,速度才快
        insert into KnWarehouseItem(itemid,knWarehouseID,CurrentQty)
    select warehouseid,itemid,sum(stockqty) as qty 
    from knmatlstock 
    group by warehouseid,itemidCOMMIT TRAN
    SET NOCOUNT OFF
    GO
      

  5.   

    --保留游标处理的简化CREATE PROCEDURE KnMaterialNum_Ontime
    AS
    SET NOCOUNT ON
    BEGIN TRANdeclare @warehouseid int
    declare @itemid int
    declare @qty decimal
    Declare t_line insensitive Cursor For 
    select warehouseid,itemid,sum(stockqty) as qty 
    from knmatlstock 
    group by warehouseid,itemidtruncate table KnWarehouseItem
    Open t_line
    Fetch next From t_line into @warehouseid,@itemid,@qtyWhile (@@fetch_status <> -1)
    Begin
       If (@@fetch_status <> -2)   Begin
        insert into KnWarehouseItem(itemid,knWarehouseID,CurrentQty)
        values(@itemid,@warehouseid,@qty)
       end
       Fetch next From t_line Into @warehouseid,@itemid,@qty
    end
    drop table t
    COMMIT TRAN
    CLOSE t_line 
    DEALLOCATE t_line 
    SET NOCOUNT OFF
    GO