【问题标题】:What is the limit of nested OR's in a CAML Query?CAML 查询中嵌套 OR 的限制是什么?
【发布时间】:2013-02-06 15:08:26
【问题描述】:

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

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

提前致谢!

【问题讨论】:

  • 尝试在CAML Query Builder 中运行查询。您可以选择使用对象模型或 Web 服务进行查询 - 看看您是否遇到同样的问题,或者您的查询是否存在其他问题。
  • 感谢您的提示,但与此同时我已经找到了解决方案。不管怎么说,还是要谢谢你! ;)

标签: sharepoint sharepoint-2007 caml


【解决方案1】:

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

其中一个答案指向这个网站:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我遇到了同样的问题。你能告诉更多关于你的解决方案。顺便说一句,非常感谢。
    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多