从问题“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的限制是什么?我无法在任何地方找到这个,因为微软声称这是无限的。
提前致谢!
答案 0 :(得分:4)
对于那些面临同样问题的人。我去了SharePoint.StackExchange.com进行搜索,发现了以下问题:
本网站的答案之一:
这个人发现500件物品太多了但是一批300件工作正常。所以我尝试了这个,这对我也有用。因此对于面临同样问题的任何人来说,这可能是解决方案。 :)
答案 1 :(得分:3)
与SP2010
和嵌套OR
相同的问题,在达到160多个嵌套项时会中断。
在尝试获取System.ArgumentException
时,引发的错误不是很有帮助(SPListItemCollection = List.GetItems(Query);
)
看起来SQL服务器拒绝执行查询。
解决方案是中断多个查询或更改查询方式。