我已使用PowerShell在SharePoint场中提取了具有完全控制访问权限的所有用户的电子表格。
现在,我正在尝试从该列表中获取仅SP管理员为独占所有者的网站列表。我将提取的电子表格加载到Access中,并编写查询以生成各种报告。
一个SP站点的所有用户ID存储在一个名为UserID
的单元格中,并用分号User1; User2;
等隔开。
SiteName Url UserID
-------- --------------- ----------------
Site1 https://test.com User1;User2;User3;
Site2 https://test2.com User1;User3;User5;...;User50;
我有一个带有UserID列的表。
例如:User1、2和3是SP管理员
Row 1 has UserID column values: "User1; User2; User3"
Row 2: "User2; User3;"
Row 3: "User1; User4; .... ;User50;"
Row 4: "User1; User2; User4;... ;User25;"
Row 5: "User3;"
我正在尝试设计一个查询,其中该单元格中仅包含User1
,User2
或User3
的行。这基本上意味着只有行1,行2和行5返回结果。 Row3
和Row4
应该不返回结果,因为其单元格中除User1
,2
和3
以外的用户
使用LIKE
对此无济于事,因为它返回找到这些用户之一的每一行。我无法使用NOT LIKE
来排除剩余的用户,因为在具有完全控制访问权限的单元格中,有很多行列出了30个以上的用户。
答案 0 :(得分:1)
UserID
列中的空格(如果有的话)使对该列的字符串操作更加复杂。
想法是用空字符串替换'User1'
,'User2'
和'User3'
,然后删除所有分号和所有空格。
如果剩下的内容是length = 0
,则此行仅包含'User1'
或'User2'
或'User3'
或它们的组合:
select * from tablename
where
len(replace(replace(replace(replace(replace(userid, 'User1', ''), 'User2', ''), 'User3', ''), ';',''), ' ', '')) = 0
答案 1 :(得分:0)
如果您能够获取不是不是 SP管理员的所有UserID的集合,则可以使用如下查询来获取所需的行:
select t1.*
from YourTable t1 left join NotSPAdmins t2 on t1.UserID like '*' & t2.UserID & '*'
where t2.UserID is null