Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Maksymalny rozmiar zapytania SQL Server? Klauzula IN? Czy istnieje lepsze podejście?

Każda partia SQL musi zmieścić się w limicie rozmiaru partii:65 536 * Rozmiar pakietu sieciowego.

Poza tym zapytanie jest ograniczone warunkami środowiska wykonawczego. Zwykle zabraknie rozmiaru stosu ponieważ x IN (a, b, c) to nic innego jak x=a OR x=b OR x=c co tworzy drzewo wyrażeńpodobne do x=a OR (x=b OR (x =c))), więc robi się bardzo głęboka z dużą liczbą OR. SQL 7 osiągnąłby SO przy około 10 tys. wartości w IN, ale w dzisiejszych czasach stosy są znacznie głębsze (ze względu na x64), więc może sięgać dość głęboko.

Aktualizacja

Znalazłeś już artykuł Erlanda na temat przekazywania list/tablic do SQL Server. W SQL 2008 dostępne są również parametry o wartościach tabeli, które pozwalają przekazać całą tabelę DataTable jako pojedynczy parametr typu tabeli i dołączyć do niej.

XML i XPath to kolejne realne rozwiązanie:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać ostatni dzień zeszłego tygodnia w sql?

  2. Użyj OBJECTPROPERTY(), aby dowiedzieć się, czy tabela jest tabelą systemową w SQL Server

  3. Generatory danych dla serwera SQL?

  4. Implementacja relacji jeden do zera lub jeden w SQL Server

  5. Dowiedz się, jak odzyskać usuniętą tabelę w SQL Server 2012 bez kopii zapasowej