如何在SQL中查询特定用户?

如何在SQL中查询特定用户?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有此权限表,其中包含以下数据: CREATE TABLE Users ( UserId int, UserName nvarchar(15), Permissions int ) CREATE TABLE Permissions ( PermissionId int, Title NVARCHAR(15) ) 和用户表 Id Title -------------- 1 'Read' 2 'Write' 4 'Update'

我有此
权限
表,其中包含以下数据:

CREATE TABLE Users
(
     UserId int,
     UserName nvarchar(15), 
     Permissions int
)

CREATE TABLE Permissions
(
     PermissionId int,
     Title NVARCHAR(15)
)
用户

Id  Title
--------------
1   'Read'
2   'Write'
4   'Update'
8   'Delete'
在这种情况下,“大卫”有“读”和“写”权限
(1+2=3)
,“莎拉”莎拉只有“删除”权限
(8)
,“玛亚姆”有“读”、“写”、“更新”和“删除”权限
(1+2+4+8=15)

如何知道David有“读”和“写”权限,或者Sara只有“删除”权限

类似这样,但在一个查询中

Id  UserName    Permission
-----------------------------------
1   'David'     3
2   'Sara'      8
3   'Maryam'    15
输出(当id=1时):“David具有读写权限”1+2=3

输出(当id=2时):“Sara只有删除权限”8


您可以使用
加入
获得权限:

2   Sara    8   Update  8
这会将值放在单独的行中

您可以使用以下技巧将它们列为列表:

select u.userId, p.title
from users u join
     permissions p
     on (u.permission & p.id) > 0;

您可以使用
加入
获得权限:

2   Sara    8   Update  8
这将值放在单独的行中

您可以使用以下技巧将它们列为列表:

select u.userId, p.title
from users u join
     permissions p
     on (u.permission & p.id) > 0;

编辑你的问题并显示你想要的结果?编辑你的问题并显示你想要的结果?
select u.*,
       stuff( (select ',' + p.title
               from permissions p
               where (p.id & u.permission) > 0
               for xml path ('')
              ), 1, 1, ''
            ) as permissions
from users u;
Select  U.UserId , P.PermissionId 
From    #Users As U
Inner join
        #Permissions As P
On      P.PermissionId % U.Permisions >= 1
Where   U.Permisions - P.PermissionId > 0