sql >> Databasteknik >  >> RDS >> Sqlserver

Maximal storlek för en SQL Server-fråga? IN-klausul? Finns det ett bättre tillvägagångssätt

Varje SQL-batch måste passa inom satsstorleksgränsen:65 536 * Nätverkspaketstorlek.

Utöver det är din fråga begränsad av körtidsförhållanden. Det kommer vanligtvis att ta slut för stackstorlek eftersom x IN (a,b,c) är ingenting annat än x=a ELLER x=b ELLER x=c vilket skapar ett uttrycksträd som liknar x=a OR (x=b OR (x) =c)), så det blir väldigt djupt med ett stort antal OR. SQL 7 skulle träffa en SO vid cirka 10 000 värden i IN, men nuförtiden är stackarna mycket djupare (på grund av x64), så det kan gå ganska djupt.

Uppdatera

Du har redan hittat Erlands artikel om att skicka listor/arrayer till SQL Server. Med SQL 2008 har du också tabellvärderade parametrar som låter dig skicka en hel DataTable som en enda tabelltypsparameter och ansluta till den.

XML och XPath är en annan gångbar 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. Installera och konfigurera MySQL Workbench på Ubuntu 16.04

  2. Skapa en skalär användardefinierad funktion i SQL Server

  3. Dynamisk SQL-exekvering i SQL Server

  4. Inkrementell datareplikering i IRI Workbench