sharepoint list caml查询问题,因为它超出了阈值限制

时间:2017-09-08 14:37:38

标签: c# sharepoint sharepoint-2013 csom on-prem

我在查询SharePoint列表时遇到错误,列表有5005条记录,阈值限制为5000。 我有一个具有不同文件夹的sharepoint列表,我正在使用与RecursiveAll的CAML查询来获取所有文件夹中的记录。 我收到了这个错误: -

  

禁止尝试操作,因为它超出了列表视图   管理员强制执行的阈值。在   Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(流   responseStream)at   

的Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()

我的查询是

"<View Scope='RecursiveAll'> <RowLimit>1000</RowLimit><Query><Where><Eq><FieldRef Name='Year' /><Value Type='Text'>" + Period + "</Value></Eq></Where></Query></View>";

年份是索引列。如果我删除where子句,它就会开始工作。在我看来recursiveall不能使用where子句。

我不想更改列表阈值限制。

2 个答案:

答案 0 :(得分:1)

列表的默认阈值为5000.您需要将此列表的SharePoint配置设置更改为具有更高的阈值。不确定您所使用的SharePoint版本,但是您是否可以访问Central Admin here is an article explaining how to change it

如果您使用的是SharePoint Online,我认为您可能会被卡住,but one of these answers has a supposed work around for it

答案 1 :(得分:1)

要解决此问题,您需要使用ContentIterator。基本上你是分批分解查询,例如2000项。来自Microsoft网站:

  

SharePoint Server提供了一个新的API,即ContentIterator,以提供帮助   在没有命中列表的情况下访问大型列表中的5,000多个项目   限制限制并接收SPQueryThrottleException。   ContentIterator实现了用于分段查询的回调模式   用于一次处理单个项目。考虑使用此功能   如果你需要处理大量可能超过a的项目   节流限制。以下简单的例子演示了   与ContentIterator一起使用的方法,其中列表返回20,001   来自查询的项目。

有关官方文档,请参阅here

example也可能会有所帮助。