sql >> データベース >  >> RDS >> Sqlserver

SQL Serverクエリの最大サイズ? IN句?より良いアプローチはありますか

    すべてのSQLバッチは、バッチサイズ制限:65,536*ネットワークパケットサイズに適合している必要があります。

    それ以外は、クエリは実行時の条件によって制限されます。 x IN(a、b、c)はx =a OR x =b OR x =cに過ぎず、x =a OR(x =b OR(x =c))、したがって、ORの数が多いと非常に深くなります。 SQL 7はINで約10kの値でSOに到達しますが、最近ではスタックがはるかに深くなっているため(x64のため)、かなり深くなる可能性があります。

    更新

    リスト/配列をSQLServerに渡すというトピックに関するErlandの記事はすでに見つかりました。 SQL 2008には、DataTable全体を単一のテーブルタイプパラメーターとして渡し、それに結合できるテーブル値パラメーターもあります。

    XMLとXPathは、もう1つの実行可能なソリューションです:

    SELECT ...
    FROM Table
    JOIN (
       SELECT x.value(N'.',N'uniqueidentifier') as guid
       FROM @values.nodes(N'/guids/guid') t(x)) as guids
     ON Table.guid = guids.guid;
    


    1. MicrosoftAccessのSalesforceデータへのリンク

    2. SQLite-データベースを作成する

    3. SQLServerクエリのUNIONALLとOR条件

    4. PDO例外を処理する方法