2017-03-27 4 views
1
ALTER PROCEDURE sp_updateInward 
    (@bl_num VARCHAR(30), 
    @cg_type VARCHAR(10)) 
AS 
    CREATE TABLE #temp_select 
    (
     qty int, 
     wght decimal(8,2), 
     vol decimal(8,2) 
    ) 

    INSERT INTO #temp_select 
     SELECT 
      CASE 
       WHEN @cg_type = 'BB' 
        THEN SUM(ISNULL(CAST(t1.qty AS FLOAT), 0)) 
       ELSE 1 
      END AS qty, 
      SUM(ISNULL(CAST(t1.wght AS FLOAT), 0)) AS wght, 
      SUM(ISNULL(CAST (t1.vol AS FLOAT), 0)) AS vol 
     FROM 
      godown_storage t1 
     INNER JOIN 
      ccosbl t2 ON t2.id = t1.blso_id 
     WHERE 
      t2.bl_num = @bl_num 

    UPDATE ccosblitem 
    SET qty = #temp_select.quantity, 
     wght = #temp_select.weight, 
     vol = #temp_select.volume 
    FROM ccosblitem t3 
    INNER JOIN ccosbl t4 ON t4.id = t3.master_id 
    WHERE t4.bl_num = @bl_num 

    SELECT * FROM ccosblitem 

ccosblitemをselect文から更新する必要があります。私はストアドプロシージャでそれを行い、一時テーブルを作成します。 declare変数を使用しようとしましたが、 'AS'が間違っているというエラーが表示されます。選択と更新テンポラリテーブルのストアドプロシージャのselect文の結果を使用

+0

サイドノート:ストアドプロシージャのプレフィックス 'sp_'を使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

答えて

0

から

を交換してください:

ALTER PROCEDURE sp_updateInward 
(
    @bl_num VARCHAR(30), 
    @cg_type VARCHAR(10) 
) 
AS 

へ:

ALTER PROCEDURE sp_updateInward @bl_num VARCHAR(30),@cg_type VARCHAR(10) 
AS 

begin 
//your action here 
end 
+0

私はそれがうまくいけばあなたの変更のために確信していません。しかしそれはちょうど削除()の方法です。 –

0

あなたのUPDATE文は、変更を必要とします。 FROM句で一時テーブルを使用せずに、SET句で一時テーブルの列を使用しています。また、結合目的のためには、一時テーブルにID列を持つ必要があり、INSERTステートメントで同じ列を設定する必要があります。以下はあなたのコードの変更です。

CREATE TABLE #temp_select 
    (
     id int, 
     qty int, 
     wght decimal(8,2), 
     vol decimal(8,2) 
    ) 

SELECT T1.ID, case.... 

UPDATE ccosblitem 
    SET qty = #temp_select.quantity, 
     wght = #temp_select.weight, 
     vol = #temp_select.volume 
    FROM ccosblitem t3 
    INNER JOIN #temp_select t4 ON t4.id = t3.master_id 
関連する問題