簡體   English   中英

在 where 子句中使用 CASE 表達式

[英]Using CASE expression inside a where clause

我有一個帶有 2 個參數的存儲過程,兩個參數都是 integer

我需要在 where 子句中使用 case 語句,但我無法正確使用

where 
dbo.StockTransfer.BranchId = @branchId 
AND
CASE WHEN IsNumeric(@roleId) = 1 
THEN 
dbo.StockTransfer.StatusId !=12    
ELSE
dbo.StockTransfer.StatusId NOT in (12, 13)  
  END

order by dbo.StockTransfer.StatusId ASC

我在“dbo.StockTransfer.StatusId !=12”中遇到錯誤

消息 102,級別 15,State 1,過程 GetDeliveryList,第 44 行 [批處理開始行 0]
'.' 附近的語法不正確。

不要打擾。 只需使用常規邏輯:

where dbo.StockTransfer.BranchId = @branchId and
      ( (IsNumeric(@roleId) = 1 and 
         dbo.StockTransfer.StatusId <> 12
        ) or
        (IsNumeric(@roleId) = 0 and
         dbo.StockTransfer.StatusId not in (12, 13)
        )
     ) 

這不處理NULL值,但可以輕松添加。

實際上,我可以將其簡化為:

where dbo.StockTransfer.BranchId = @branchId and
      dbo.StockTransfer.StatusId <> 12 and
      (IsNumeric(@roleId) = 1 or
       dbo.StockTransfer.StatusId <> 13
      )

鑒於有關您要返回的內容的最新評論,我認為它會是這樣的。 為了括號的清晰,我添加了很多空格。

where dbo.StockTransfer.BranchId = @branchId 
    AND 
    (
        ( 
            @roleId = 1
            AND
            StatusId in (13, 14)
        )
        OR
        (
            @roleId <> 1
            AND
            StatusId = 14
        )
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM