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.