1

从问题“ CAML 中的SQL IN 等效项”中,我了解到 SharePoint 2010 具有 CAML 的 SQL“IN”等效项。另外2007版本不支持这个。OP 通过嵌套一堆 OR 语句来解决这个问题,以达到相同的结果。我对此进行了测试,嵌套确实很神奇,但是......

就我而言,我从大约 1000 个项目的列表中获取项目。我为我的 CAML 查询动态创建了一个语句,其中包含嵌套 OR 块中的所有 ID。我不担心大量嵌套块,因为是 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 元素测试了相同的代码,结果符合预期。我的问题是:嵌套 Or 元素的限制是什么?我无法在任何地方找到它,因为微软声称这是无限的。

提前致谢!

4

2 回答 2

4

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

答案之一指向该网站:

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

于 2013-02-22T10:28:03.987 回答
3

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

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

解决方法是中断多个查询或改变查询方式。

于 2014-02-03T14:59:29.650 回答