Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Tamanho máximo para uma consulta do SQL Server? Cláusula IN? Existe uma abordagem melhor


Cada lote SQL deve caber no Limite de Tamanho do Lote:65.536 * Tamanho do Pacote de Rede.

Fora isso, sua consulta é limitada pelas condições de tempo de execução. Ele normalmente ficará sem tamanho de pilha porque x IN (a,b,c) não é nada além de x=a OR x=b OR x=c que cria uma árvore de expressão semelhante a x=a OR (x=b OR (x =c)), então fica muito profundo com um grande número de OR. O SQL 7 atingiria um SO em cerca de 10k valores no IN, mas hoje em dia as pilhas são muito mais profundas (por causa do x64), então pode ir bem fundo.

Atualizar

Você já encontrou o artigo de Erland sobre o tópico de passar listas/matrizes para o SQL Server. Com o SQL 2008, você também tem Parâmetros com valor de tabela que permitem passar uma DataTable inteira como um único parâmetro de tipo de tabela e unir-se a ela.

XML e XPath é outra solução viável:
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;