2013-02-21 20 views
1

從「SQL IN equivalent in CAML」這個問題中,我瞭解到SharePoint 2010對於CAML具有SQL「IN」等效值。另外,2007版本不支持這一點。 OP通過嵌套一堆OR語句來解決這個問題,以達到相同的結果。我測試了這個,並且嵌套確實做了這個魔術,但是...CAML查詢中嵌套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.

當我打電話GetListItems - 從SharePoint 2007內置webservice的方法,我得到以下錯誤:

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元素的限制?由於微軟稱這是無限的,我無法在任何地方找到它。

在此先感謝!

+1

嘗試在[CAML Query Builder](http://www.u2u.be/res/tools/camlquerybuilder.aspx)中運行查詢。您可以選擇使用對象模型或Web服務進行查詢 - 請參閱您是否遇到同樣的問題,或者查詢存在其他問題。 – 2013-02-22 09:53:36

+0

感謝您的提示,但同時我已經找到了解決方案。不管怎麼說,還是要謝謝你! ;) – Abbas 2013-02-22 10:23:56

回答

4

對於那些面臨同樣問題的人。我去上一個SharePoint.StackExchange.com搜索和發現以下問題:

一個答案指向該網站的:

該人發現500件物品太多,但一批300件物品運轉良好。所以我嘗試了這一點,這也適用於我。所以對於任何面臨同樣問題的人來說,這可能是解決方案。 :)

3

SP2010和嵌套OR相同的問題,達到160 +嵌套項目時會中斷。

嘗試獲取SPListItemCollection = List.GetItems(Query); 時引發的錯誤不是很有幫助(System.ArgumentException)看起來SQL服務器拒絕執行查詢。

解決方案是打破多個查詢或改變查詢方式。

+0

+1,感謝您添加此信息! :) – Abbas 2014-02-03 15:37:55

+0

我遇到了同樣的問題。你能告訴更多關於你的解決方案嗎?順便說一句,非常感謝。 – 2017-01-10 01:34:57