我在查询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
子句。
我不想更改列表阈值限制。
答案 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也可能会有所帮助。