sql >> Databáze >  >> RDS >> Sqlserver

Maximální velikost pro dotaz SQL Server? klauzule IN? Existuje lepší přístup

Každá dávka SQL se musí vejít do limitu velikosti dávky:65 536 * Velikost síťového paketu.

Kromě toho je váš dotaz omezen běhovými podmínkami. Obvykle mu dojde velikost zásobníku, protože x IN (a,b,c) není nic jiného než x=a OR x=b OR x=c, což vytváří strom výrazů podobný x=a OR (x=b OR (x =c)), takže se dostane velmi hluboko s velkým počtem OR. SQL 7 by dosáhl SO při hodnotách IN asi 10k, ale v současnosti jsou stacky mnohem hlubší (kvůli x64), takže to může jít pěkně hluboko.

Aktualizovat

Již jste našli Erlandův článek na téma předávání seznamů/polí na SQL Server. S SQL 2008 máte také parametry tabulky hodnot, které vám umožňují předat celou DataTable jako jeden parametr typu tabulky a připojit se k ní.

XML a XPath jsou dalším životaschopným řešením:

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. Pořadí vrácení řádku SQL

  2. Jedinečné omezení Postgres vs index

  3. Existuje způsob, jak nastavit čas vypršení platnosti, po kterém se záznam dat v PostgreSQL automaticky smaže?

  4. Heroku and Rails:Gem Load Error s Postgres, nicméně je specifikována v GEMFILE