>有谁知道如何使用基于特定 SharePoint 用户的 sql 查询来获取 SharePoint 列表数据。
您不能真正
使用 SQL 从 SharePoint 列表中获取数据。执行此操作的最常见方法是自定义解决方案,您可以在其中使用 CAML (SPQuery) 检索列表项(例如由用户创建)的数据 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.aspx 或者您可以公开 SharePoint 服务以获得相同的结果 http://msdn.microsoft.com/en-us/library/sharepoint/jj164060.aspx。
只要它是 SharePoint 2010,只要您有列表 ID GUID,从 SQL 中提取仍然相对容易
看这里
SELECT
ud.tp_ID
, ud.tp_ListId
, ud.tp_Author
, ud.nvarchar1
, ud.nvarchar2
, ud.nvarchar3
, ud.nvarchar4
, ud.nvarchar5
, ud.nvarchar6
, ud.nvarchar7
, ud.nvarchar8
, ud.nvarchar9
, ud.nvarchar10
, ud.nvarchar11
, ud.nvarchar12
, ud.*
FROM dbo.UserData ud
WHERE (ud.tp_ListId = '[{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}')
我的情况的解决方案 - 显示SP列表
select l.tp_title
, n1.title.value('(text())[1]', 'nvarchar(32)') as Title
, n2.[status].value('(text())[1]', 'nvarchar(32)') as [Status]
, n3.[priority].value('(text())[1]', 'nvarchar(32)') as [Priority]
from Lists l
join UserData u on u.tp_ListId = l.tp_ID
cross apply tp_ColumnSet.nodes('/nvarchar1') AS n1(title)
cross apply tp_ColumnSet.nodes('/nvarchar3') AS n2([status])
cross apply tp_ColumnSet.nodes('/nvarchar4') AS n3([priority])
where l.tp_title = 'LIST NAME'
首先,您的 SP 列表需要一个捕获用户帐户信息的字段。将 SQL 报表生成器与 SharePoint 列表数据连接配合使用,在报表上设置一个参数,以便@User
。将此参数设置为隐藏参数。将此参数的默认值设置为 =Right(User!UserID,8)
:这将为您提供用户帐户信息的最后 8 个字符,然后您可以根据该字符过滤数据集(您的帐户信息可能大于或小于 8,因此请根据您的设置进行构建)。您需要对数据集或表本身设置过滤器,以将列表中的字段与参数进行匹配。