为何获取DotNetNuke角色的SQL查询返回错误值?
修正DotNetNuke角色查询的SQL语句
你的SQL查询返回不正确结果,大概率是表连接和筛选条件的逻辑出了问题,咱们来一步步梳理并修正:
问题出在哪?
- 表关联条件错配:你把
UserRoles.UserID和UserPortals.UserPortalId做了关联,但DotNetNuke的UserPortals表里,UserPortalId是这个表的主键ID,真正关联用户ID的字段是UserId,这直接导致关联逻辑完全错误。 - 筛选条件冗余且偏离目标:
WHERE里的userportals.UserPortalId = 1是在筛选UserPortals表的主键,不是你要查询的用户ID;后面的子查询IN (SELECT RoleID FROM UserRoles WHERE UserID = 1)也完全没必要,主查询已经关联了UserRoles,直接筛选用户ID就行。
修正后的查询语句
SELECT 1 AS 'CurrentUserID', UserPortals.UserId AS PassedUserId, -- 换成正确的用户ID字段 UserPortals.PortalId, Roles.RoleID, Roles.RoleName, UserRoles.ExpiryDate, UserRoles.LastModifiedOnDate FROM UserRoles INNER JOIN Roles ON Roles.RoleID = UserRoles.RoleID INNER JOIN UserPortals ON UserRoles.UserID = UserPortals.UserId -- 修正关联条件 WHERE UserPortals.UserId = 1 -- 直接指定要查询的用户ID
额外提示
如果需要限定只查询某个特定门户下的角色,只要在WHERE子句里加一句AND UserPortals.PortalId = [你的目标门户ID]就行;要是CurrentUserID需要动态获取当前登录用户,你可以根据执行环境换成对应的参数(比如DotNetNuke里常用的@CurrentUserId)。
内容的提问来源于stack exchange,提问作者jtmaher2
相关产品推荐
相关产品推荐

