我有一个存储过程,可以从表中返回值。我想要的是如果用户不是admin,则根据选项0、1、2返回特定值,如果用户是admin,则将显示所有选项,这将在一个查询中发生。这是示例代码。
IF(@isAdmin = 'true')
BEGIN
SELECT TOP 10 *
FROM [dbo].[inventorydetails]
WHERE InventoryType = 'active'
END
ELSE
BEGIN
SELECT TOP 10 *
FROM [dbo].[inventorydetails]
WHERE InventoryType = 'active'
AND OptionType = 0
END
我想将我的代码缩短成这样……
SELECT TOP 10 *
FROM [dbo].[inventorydetails]
WHERE InventoryType = 'active'
AND OptionType = CASE WHEN @isAdmin != 'true' THEN 0 END
但这不起作用。有什么想法吗?
答案 0 :(得分:3)
如果不使用CASE
,您也可以通过以下简单条件获得相同的结果。
SELECT TOP 10 *
FROM [dbo].[inventorydetails]
WHERE InventoryType = 'active' AND( @isAdmin = 'true' OR OptionType = 0 )
答案 1 :(得分:1)
SELECT TOP 10 *
FROM [dbo].[inventorydetails]
WHERE InventoryType = 'active'
AND OptionType = CASE WHEN @isAdmin != 'true' THEN 0 ELSE OptionType END