Sql 如何查询Sharepoint列表数据?

Sql 如何查询Sharepoint列表数据?,sql,sql-server,sharepoint,sharepoint-2010,Sql,Sql Server,Sharepoint,Sharepoint 2010,是否有人知道如何使用基于特定Sharepoint用户的sql查询获取Sharepoint列表数据 您不能使用而不应该真正使用SQL从SharePoint列表获取数据。最常用的方法是自定义解决方案,您可以使用CAML(SPQuery)检索列表项(例如由用户创建)的数据,或者公开SharePoint services以获得相同的结果。只要是SharePoint 2010,只要您具有列表id GUID,从SQL中提取数据仍然相对容易 看 我的案例解决方案-显示SP列表 select l.tp_titl

是否有人知道如何使用基于特定Sharepoint用户的sql查询获取Sharepoint列表数据

您不能使用而不应该真正使用SQL从SharePoint列表获取数据。最常用的方法是自定义解决方案,您可以使用CAML(SPQuery)检索列表项(例如由用户创建)的数据,或者公开SharePoint services以获得相同的结果。

只要是SharePoint 2010,只要您具有列表id GUID,从SQL中提取数据仍然相对容易


我的案例解决方案-显示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列表需要一个字段来捕获用户帐户信息。使用带有SharePoint列表数据连接的SQL报表生成器,在报表上为
@User
设置一个参数。将此设置为隐藏参数。将此参数的默认值设置为
=Right(User!UserID,8)
:这将为您提供用户帐户信息的最后8个字符,您可以根据这些字符筛选数据集(您的帐户信息可能大于或小于8,因此根据您的设置进行构建)。您需要在数据集或表本身上设置一个过滤器,以便将列表中的字段与参数相匹配

用哪种语言?您的意思是直接向SQL Server执行SQL查询吗???或者您的意思是使用JavaScript中的SQL语法查询Sharepoint列表?对于最后一个选项(带有JavaScript的SQL语法),请参见扩展Velin的答案,您必须将SharePoint视为黑箱。不仅模式非常奇怪(在关系数据库中安装文档数据库不是很自然也不简单),而且微软说模式不是固定的,最终可能会随着新版本的发布而改变。这很好,除了CAML(SPQuery)对于查询语言来说,这是一个非常可怜的借口,除非你想要一个简单的select语句,没有聚合、独特或顶级功能。在很多情况下,你可能不得不这样做,或者出于任何原因你没有回答这个问题,这是如何在SQL Server中使用SQL语句完成的。我会投票否决你,但我没有足够的分数。Access使用“添加外部数据->在线服务->sharepoint”并生成一个“表”。无论如何,从sharepoint列表导出到sql表的替代方法是什么?请注意,这里不需要dbo.Lists连接(或者您希望最后执行l.*)非常正确,在这个查询中不需要Lists表,我已经对数据溢出和有换行的情况进行了更改?
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'