sql >> Database teknologi >  >> RDS >> Sqlserver

Maksimal størrelse for en SQL Server-forespørgsel? IN klausul? Er der en bedre tilgang

Hver SQL-batch skal passe ind i batchstørrelsesgrænsen:65.536 * Netværkspakkestørrelse.

Bortset fra det er din forespørgsel begrænset af runtime-betingelser. Det vil normalt løbe tør for stakstørrelse, fordi x IN (a,b,c) ikke er andet end x=a ELLER x=b ELLER x=c, hvilket skaber et udtrykstræ svarende til x=a OR (x=b OR (x) =c)), så det bliver meget dybt med et stort antal OR. SQL 7 ville ramme en SO ved omkring 10k værdier i IN, men i dag er stakke meget dybere (på grund af x64), så det kan gå ret dybt.

Opdater

Du har allerede fundet Erlands artikel om emnet at overføre lister/arrays til SQL Server. Med SQL 2008 har du også Table Valued Parameters, som giver dig mulighed for at sende en hel DataTable som en enkelt tabeltypeparameter og tilslutte dig den.

XML og XPath er en anden levedygtig løsning:

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. Sådan finder du navnet på en begrænsning i SQL Server

  2. Hvordan Asind() virker i PostgreSQL

  3. Eksport af din database til overførsel

  4. Sådan installeres MySQL på macOS