我有一个存储的proc,带有2个参数,均为整数
我需要在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,状态1,过程GetDeliveryList,第44行[批处理开始第0行]
'!'附近的语法不正确。
答案 0 :(得分:2)
不要打扰。只需使用常规逻辑即可:
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
)
答案 1 :(得分:0)
给出有关您想要退还的物品的最新评论,我想应该是这样的。为了清楚起见,我添加了很多空白。
where dbo.StockTransfer.BranchId = @branchId
AND
(
(
@roleId = 1
AND
StatusId in (13, 14)
)
OR
(
@roleId <> 1
AND
StatusId = 14
)
)