Erland Sommarskog ha mantenuto l'autorevole risposta a questa domanda negli ultimi 16 anni:Array ed elenchi in SQL Server .
Esistono almeno una dozzina di modi per passare un array o un elenco a una query; ognuno ha i suoi pro e contro unici.
- Parametri con valori di tabella. Solo SQL Server 2008 e versioni successive e probabilmente il più vicino a un approccio "migliore" universale.
- Il metodo iterativo. Passa una stringa delimitata e scorrela.
- Utilizzo del CLR. SQL Server 2005 e versioni successive solo da linguaggi .NET.
- XML. Ottimo per inserire molte righe; potrebbe essere eccessivo per SELECT.
- Tabella dei numeri. Prestazioni/complessità superiori rispetto al semplice metodo iterativo.
- Elementi a lunghezza fissa. La lunghezza fissa migliora la velocità sulla stringa delimitata
- Funzione dei numeri. Variazioni di Table of Numbers e lunghezza fissa in cui i numeri sono generati in una funzione piuttosto che presi da una tabella.
- Espressione di tabella comune ricorsiva (CTE). SQL Server 2005 e versioni successive, ancora non troppo complesso e con prestazioni superiori rispetto al metodo iterativo.
- SQL dinamico. Può essere lento e ha implicazioni sulla sicurezza.
- Passare l'elenco come molti parametri. Noioso e soggetto a errori, ma semplice.
- Metodi davvero lenti. Metodi che utilizzano charindex, patindex o LIKE.
Non posso davvero raccomandare abbastanza per leggere l'articolo per conoscere i compromessi tra tutte queste opzioni.