sql >> Database >  >> RDS >> Sqlserver

Maximale grootte voor een SQL Server-query? IN clausule? Is er een betere aanpak?

Elke SQL-batch moet passen in de Batchgroottelimiet:65.536 * Netwerkpakketgrootte.

Anders dan dat, wordt uw query beperkt door runtime-voorwaarden. Het zal meestal geen stapelgrootte hebben omdat x IN (a,b,c) niets anders is dan x=a OR x=b OR x=c wat een expressiestructuur creëert die lijkt op x=a OR (x=b OR (x =c)), dus het wordt erg diep met een groot aantal OF. SQL 7 zou een SO bereiken met ongeveer 10k-waarden in de IN, maar tegenwoordig zijn stapels veel dieper (vanwege x64), dus het kan behoorlijk diep gaan.

Bijwerken

Je hebt het artikel van Erland al gevonden over het doorgeven van lijsten/arrays aan SQL Server. Met SQL 2008 hebt u ook tabelwaardeparameters waarmee u een volledige gegevenstabel kunt doorgeven als een enkele tabeltypeparameter en hieraan kunt deelnemen.

XML en XPath is een andere haalbare oplossing:

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. TNSPING OK maar sqlplus geeft ORA-12154?

  2. hoe tweede toe te voegen in orakel-tijdstempel

  3. [Video] Kracht van indexeren in PostgreSQL

  4. MySQL CHAR() vs T-SQL CHAR():wat is het verschil?