Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Maximale Größe für eine SQL Server-Abfrage? IN-Klausel? Gibt es einen besseren Ansatz

Jeder SQL-Batch muss in das Batch-Größenlimit passen:65.536 * Netzwerkpaketgröße.

Ansonsten ist Ihre Abfrage durch Laufzeitbedingungen eingeschränkt. Es wird normalerweise die Stapelgröße ausgehen, da x IN (a,b,c) nichts anderes ist als x=a ODER x=b ODER x=c, wodurch ein Ausdrucksbaum ähnlich wie x=a ODER (x=b ODER (x =c)), also wird es bei einer großen Anzahl von ODER sehr tief. SQL 7 würde bei etwa 10.000 Werten im IN einen SO erreichen, aber heutzutage sind die Stacks viel tiefer (wegen x64), also kann es ziemlich tief gehen.

Aktualisieren

Sie haben bereits den Artikel von Erland zum Thema Listen/Arrays an SQL Server übergeben gefunden. Mit SQL 2008 haben Sie auch Tabellenwertparameter, mit denen Sie eine ganze Datentabelle als einen einzelnen Tabellentypparameter übergeben und daran teilnehmen können.

XML und XPath sind eine weitere brauchbare Lösung:

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;