Erland Sommarskog a maintenu la réponse faisant autorité à cette question au cours des 16 dernières années :Tableaux et listes dans SQL Server .
Il existe au moins une douzaine de façons de transmettre un tableau ou une liste à une requête ; chacun a ses propres avantages et inconvénients.
- Paramètres de table. SQL Server 2008 et versions ultérieures uniquement, et probablement la plus proche d'une "meilleure" approche universelle.
- La méthode itérative. Passez une chaîne délimitée et bouclez-la.
- Utilisation du CLR. SQL Server 2005 et supérieur à partir des langages .NET uniquement.
- XML. Très bon pour insérer de nombreuses lignes; peut être exagéré pour les SELECT.
- Table des nombres. Performances/complexité supérieures à la méthode itérative simple.
- Éléments de longueur fixe. La longueur fixe améliore la vitesse sur la chaîne délimitée
- Fonction des nombres. Variations de Table of Numbers et de longueur fixe où le nombre est généré dans une fonction plutôt que tiré d'une table.
- Expression de table commune récursive (CTE). SQL Server 2005 et supérieur, toujours pas trop complexe et plus performant que la méthode itérative.
- SQL dynamique. Peut être lent et a des implications sur la sécurité.
- Passer la liste en plusieurs paramètres. Fastidieux et sujet aux erreurs, mais simple.
- Méthodes vraiment lentes. Méthodes utilisant charindex, patindex ou LIKE.
Je ne peux vraiment pas recommander assez de lire l'article pour en savoir plus sur les compromis entre toutes ces options.