Erland Sommarskog ha mantenido la respuesta autorizada a esta pregunta durante los últimos 16 años:Matrices y listas en SQL Server .
Hay al menos una docena de formas de pasar una matriz o lista a una consulta; cada uno tiene sus propios pros y contras únicos.
- Parámetros con valores de tabla. Solo SQL Server 2008 y superior, y probablemente el más cercano a un enfoque "mejor" universal.
- El método iterativo. Pase una cadena delimitada y realice un bucle a través de ella.
- Uso de CLR. SQL Server 2005 y superior solo desde lenguajes .NET.
- XML. Muy bueno para insertar muchas filas; puede ser excesivo para los SELECT.
- Tabla de números. Mayor rendimiento/complejidad que el método iterativo simple.
- Elementos de longitud fija. La longitud fija mejora la velocidad sobre la cadena delimitada
- Función de los números. Variaciones de Table of Numbers y de longitud fija donde el número se genera en una función en lugar de tomarse de una tabla.
- Expresión de tabla común recursiva (CTE). SQL Server 2005 y superior, aún no demasiado complejo y de mayor rendimiento que el método iterativo.
- SQL dinámico. Puede ser lento y tiene implicaciones de seguridad.
- Pasar la lista como muchos parámetros. Tedioso y propenso a errores, pero simple.
- Métodos realmente lentos. Métodos que usan charindex, patindex o LIKE.
Realmente no puedo recomendar lo suficiente como para leer el artículo para conocer las ventajas y desventajas entre todas estas opciones.