Ray*_*boe 0 sql t-sql sql-server
给定每个角色一行的结果集,如何设置三个变量,例如 IsAdmin、IsSuperUser、IsUser。
我尝试过这个,但它太难看了。我想只用一个查询来完成同样的任务。我知道如何将它们组合成一个包含三个子查询的查询,但如果可能的话,我想只使用一个查询。
declare @IsAdmin bit, @IsSuperUser bit, @IsUser bit
select RoleId into #CallerRoles from AspNetUserRoles aur where aur.UserId = @CallerUserId
set @IsAdmin = case when exists (select * from #CallerRoles where RoleId = 1) then 1 else 0 end
set @IsSuperUser = case when exists (select * from #CallerRoles where RoleId = 3) then 1 else 0 end
set @IsUser = case when exists (select * from #CallerRoles where RoleId = 5) then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)
如果您想在一个查询中设置变量IsAdmin、IsSuperUser、 和IsUser,您可以使用条件聚合,如下所示:
DECLARE @IsAdmin BIT, @IsSuperUser BIT, @IsUser BIT
SELECT
@IsAdmin = MAX(CASE WHEN RoleId = 1 THEN 1 ELSE 0 END),
@IsSuperUser = MAX(CASE WHEN RoleId = 3 THEN 1 ELSE 0 END),
@IsUser = MAX(CASE WHEN RoleId = 5 THEN 1 ELSE 0 END)
FROM
AspNetUserRoles
WHERE
UserId = @CallerUserId
Run Code Online (Sandbox Code Playgroud)
在此查询中,该MAX函数与内部条件表达式 ( ) 一起使用CASE WHEN。每个条件表达式都会检查RoleId并根据条件分配 1 或 0。然后将每个结果进行聚合MAX以获得每个变量的单个值。
请注意,该查询假定AspNetUserRoles表包含列RoleId和UserId,它们用于过滤数据。根据您的架构调整表和列名称。
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |