Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Максимален размер за заявка на SQL сървър? IN клауза? Има ли по-добър подход

Всяка SQL партида трябва да отговаря на ограничението за размер на партидата:65 536 * Размер на мрежовия пакет.

Освен това, вашата заявка е ограничена от условията на изпълнение. Обикновено ще свърши размера на стека, защото x IN (a,b,c) не е нищо друго освен x=a ИЛИ x=b ИЛИ x=c, което създава дърво на изрази, подобно на x=a ИЛИ (x=b ИЛИ (x =c)), така че става много дълбоко с голям брой ИЛИ. SQL 7 би ударил SO при около 10k стойности в IN, но в днешно време стекове са много по-дълбоки (заради x64), така че може да отиде доста дълбоко.

Актуализиране

Вече намерихте статията на Ерланд по темата за предаване на списъци/масиви към SQL Server. Със SQL 2008 имате и параметри с стойност на таблица, които ви позволяват да предадете цяла DataTable като параметър от един тип таблица и да се присъедините към нея.

XML и XPath са друго жизнеспособно решение:

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. @@ROWCOUNT – Вземете броя на редовете, засегнати от последното изявление в SQL Server

  2. Как да напиша UTF-8 знаци с помощта на групово вмъкване в SQL Server?

  3. SQL:Изберете динамично име на колона въз основа на променлива

  4. Научете дизайн на база данни със SQL Server Management Studio (SSMS) – част 2

  5. SQL LocalDB срещу SQL Server CE