首页 > 解决方案 > 如果用户是管理员,则显示所有选项,如果不是管理员,则在 SQL 查询中仅显示一个选项

问题描述

我有一个从表中返回值的存储过程。我想要的是返回基于选项 0、1、2 的特定值,如果用户不是管理员,然后如果用户是管理员,将显示所有选项,这将在一个查询中发生。这是示例代码。

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

但这不起作用。有任何想法吗?

标签: sqlsql-servercase

解决方案


您也可以获得相同的结果,而无需CASE使用以下简单条件。

SELECT TOP 10 *
    FROM [dbo].[inventorydetails]
    WHERE InventoryType = 'active' AND( @isAdmin = 'true' OR OptionType = 0 )

推荐阅读