CAML查询中嵌套OR的限制是多少?

时间:2013-02-21 10:21:35

标签: sharepoint sharepoint-2007 caml

从问题“SQL IN equivalent in CAML”我了解到SharePoint 2010具有与CAML等效的SQL“IN”。此外,2007版本不支持此功能。 OP通过嵌套一堆OR语句来解决这个问题,以实现相同的结果。我测试了这个,嵌套确实有魔力,但是......

在我的情况下,我从列表中获取大约1000个项目的项目。我动态创建一个语句,其中包含嵌套OR块中的所有ID,用于我的CAML查询。我并不担心大量的嵌套块,因为this是MSDN关于OR元素的陈述:

Occurrences: Minimum: 0, Maximum: Unbounded.

This element can be nested inside other Or and And elements. The server supports unlimited complicated queries.

当我从SharePoint 2007内置Web服务调用 GetListItems 方法时,出现以下错误:

Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown. Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

我的代码编写正确,因为我只用5个嵌套的Or-elements测试了相同的代码,结果是预期的。我的问题是:嵌套Or-elements的限制是什么?我无法在任何地方找到这个,因为微软声称这是无限的。

提前致谢!

2 个答案:

答案 0 :(得分:4)

对于那些面临同样问题的人。我去了SharePoint.StackExchange.com进行搜索,发现了以下问题:

本网站的答案之一:

这个人发现500件物品太多了但是一批300件工作正常。所以我尝试了这个,这对我也有用。因此对于面临同样问题的任何人来说,这可能是解决方案。 :)

答案 1 :(得分:3)

SP2010和嵌套OR相同的问题,在达到160多个嵌套项时会中断。

在尝试获取System.ArgumentException时,引发的错误不是很有帮助(SPListItemCollection = List.GetItems(Query);) 看起来SQL服务器拒绝执行查询。

解决方案是中断多个查询或更改查询方式。