2016-07-21 15 views
-2

これはあまりにも長い間見つめていましたが、わかりません。どのぐらいの間? 長すぎます。エラーの原因を教えてください。これはTHENステートメントを指しています。SQL: '='付近の構文が正しくありません

DECLARE @lp varchar(30) = '307856874' 
DECLARE @item varchar(30) = '%' 
DECLARE @loc varchar(8) = '%' 
DECLARE @lot varchar(20) = '%' 
DECLARE @trans_type varchar(20) = '%' 
DECLARE @trans_date datetime = NULL; 
DECLARE @desc varchar(20) = '%' 
DECLARE @whse varchar(20) = '%' 
DECLARE @qty decimal = NULL; 


SELECT 

    t.lp_num, 
    t.item, 
    t.loc, 
    t.lot, 
    t.trans_type, 
    t.trans_date, 
    t.description, 
    t.whse, 
    t.qty, 
    t.u_m, 
    t.emp_num, 
    t.ref_num, 
    t.ref_line_suf, 
    t.createdate, 
    t.FGLotCode, 
    t.Uf_Shift, 
    t.Uf_shift_start_date, 
    t.Uf_TruckID, 
    t.Uf_EdiExtracted 


FROM 

    ISW_LPTrans AS t 

WHERE 

    LTRIM(RTRIM((t.lp_num))) LIKE @lp AND 
    t.item LIKE @item AND 
    t.loc LIKE @loc AND 
    t.lot LIKE @lot AND 
    t.trans_type LIKE @trans_type AND 
    (@trans_date IS NULL OR t.trans_date = @trans_date) AND 
    t.description LIKE @desc AND 
    t.whse LIKE @whse AND 
    (CASE 
     WHEN (@qty IS NULL) 
     THEN (t.qty = 112) 
     ELSE (t.qty = @qty) 
    END) 
+1

あなたがnull'なので 'で比較している – scaisEdge

+1

...すべてのコードを示しています。 '@qty = NULL'を' @qty IS NULL'に変更してください。 –

+0

@vkpは変更を加えましたが、引き続き同じエラーが発生しました。 – whatwhatwhat

答えて

4

case文で割り当てることはできません。

t.qty = CASE 
      WHEN (@qty IS NULL) THEN 112 
      ELSE @qty) 
     END 

私は明確にするため、エンドを変更することをお勧めします:

t.qty=ISNULL(@qty,112) 
+0

それは、ありがとう。私はそうすることができる9分でこの答えを正解と受け入れます。 – whatwhatwhat

+1

は、すべてのプラットフォームで動作し、SQL標準であるため、COALESCE(@ qty、112)がさらに優れています。 – Hogan

関連する問題