Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询中,如果用户是admin,则显示所有选项;如果不是admin,则仅显示一个选项_Sql_Sql Server_Case - Fatal编程技术网

在SQL查询中,如果用户是admin,则显示所有选项;如果不是admin,则仅显示一个选项

在SQL查询中,如果用户是admin,则显示所有选项;如果不是admin,则仅显示一个选项,sql,sql-server,case,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

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

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

您也可以在不使用
案例的情况下,通过以下简单条件获得相同的结果

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

您也可以在不使用
CASE的情况下,通过以下简单条件获得相同的结果

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

您不需要对
@isAdmin
进行第二次检查
@isAdmin='true'或OptionType=0
与较长版本具有完全相同的真值表您不需要对
@isAdmin
进行第二次检查
@isAdmin='true'或OptionType=0
与较长版本的真值表完全相同