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

Procedimento armazenado T-SQL que aceita vários valores de ID


Erland Sommarskog manteve a resposta oficial para esta pergunta nos últimos 16 anos:Arrays e listas no SQL Server .

Há pelo menos uma dúzia de maneiras de passar um array ou lista para uma consulta; cada um tem seus prós e contras únicos.
  • Parâmetros com valor de tabela. Somente SQL Server 2008 e superior, e provavelmente o mais próximo de uma abordagem "melhor" universal.
  • O método iterativo. Passe uma corda delimitada e faça um loop por ela.
  • Usando o CLR. SQL Server 2005 e superior apenas a partir de idiomas .NET.
  • XML. Muito bom para inserir muitas linhas; pode ser um exagero para SELECTs.
  • Tabela de Números. Maior desempenho/complexidade do que o método iterativo simples.
  • Elementos de comprimento fixo. O comprimento fixo melhora a velocidade sobre a string delimitada
  • Função dos Números. Variações da Tabela de Números e comprimento fixo onde o número é gerado em uma função em vez de ser obtido de uma tabela.
  • Expressão de tabela comum recursiva (CTE). SQL Server 2005 e superior, ainda não muito complexo e com desempenho superior ao método iterativo.
  • SQL dinâmico. Pode ser lento e tem implicações de segurança.
  • Passando a lista como muitos parâmetros. Enfadonho e propenso a erros, mas simples.
  • Métodos muito lentos. Métodos que usam charindex, patindex ou LIKE.

Eu realmente não posso recomendar o suficiente para ler o artigo para aprender sobre as compensações entre todas essas opções.