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.

ネストされた Or 要素を 5 つだけ使用して同じコードをテストし、結果が期待どおりであるため、コードは正しく記述されています。私の質問は: ネストされた Or 要素の制限は何ですか? Microsoft はこれが無制限であると主張しているため、これはどこにもありません。

前もって感謝します!

4

2 に答える 2

4

同じ問題に直面している方へ。SharePoint.StackExchange.com で検索したところ、次の質問が見つかりました。

答えの1つは、このWebサイトを指しています。

その人は、500 個のアイテムが多すぎることを発見しましたが、300 個のバッチは問題なく機能しました。だから私はこれを試しましたが、これも私にとってはうまくいきます。したがって、同じ問題に直面している人にとっては、これが解決策になる可能性があります。:)

于 2013-02-22T10:28:03.987 に答える
3

SP2010およびネストされたs と同じ問題で、 OR160 以上のネストされたアイテムに達すると壊れます。

発生したエラーはあまり役に立ちません ( System.ArgumentException) SPListItemCollection = List.GetItems(Query); SQL サーバーがクエリの実行を拒否したように見えます。

解決策は、複数のクエリを中断するか、クエリの方法を変更することです。

于 2014-02-03T14:59:29.650 に答える