在SQL查询中,如果用户是admin,则显示所有选项;如果不是admin,则仅显示一个选项
我有一个从表中返回值的存储过程。我想要的是,如果用户不是admin,则返回基于选项0、1、2的特定值,如果用户是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
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
与较长版本的真值表完全相同