[英]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.