如果用户是admin,则显示所有选项;如果不是admin,则仅显示一个选项

时间:2019-01-23 07:09:42

标签: sql sql-server case

我有一个存储过程,可以从表中返回值。我想要的是如果用户不是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

但这不起作用。有什么想法吗?

2 个答案:

答案 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