在系统开发中,经常会遇到像下面这种场景的功能模块:管理用户的角色,在界面上显示所有Active的角色,如果用户有这个角色在界面上标示出来,比如CheckBox勾中,如下图。
这里会涉及三个表,User,Role,UserRoleRelation.
DECLARE
@UserID
INT
SELECT @UserID = 1
; WITH CTE_UserRole(RoleID) AS
(
SELECT RoleID
FROM dbo.BasicUserRoleRelation WITH (NOLOCK)
WHERE UserID = @UserID
)
SELECT a.RoleID
,a.RoleName
, CAST ( CASE WHEN b.RoleID IS NULL THEN 0
ELSE 1
END AS BIT ) AS IsChecked
FROM dbo. [ BasicRole ] a WITH (NOLOCK)
LEFT OUTER JOIN CTE_UserRole b WITH (NOLOCK)
ON a.RoleID = b.RoleID
WHERE a. [ Status ] = ' A '
SELECT @UserID = 1
; WITH CTE_UserRole(RoleID) AS
(
SELECT RoleID
FROM dbo.BasicUserRoleRelation WITH (NOLOCK)
WHERE UserID = @UserID
)
SELECT a.RoleID
,a.RoleName
, CAST ( CASE WHEN b.RoleID IS NULL THEN 0
ELSE 1
END AS BIT ) AS IsChecked
FROM dbo. [ BasicRole ] a WITH (NOLOCK)
LEFT OUTER JOIN CTE_UserRole b WITH (NOLOCK)
ON a.RoleID = b.RoleID
WHERE a. [ Status ] = ' A '
查询结果:
再用ORM等映射到对象列表,然后在UI端绑定即可。
本文介绍了一种用于系统开发中管理用户角色的方法。该方法通过SQL查询来获取指定用户的已分配和未分配角色,并使用CTE(公共表表达式)简化查询过程。查询结果将用于前端界面展示。


2285

被折叠的 条评论
为什么被折叠?



