Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Procédure stockée T-SQL qui accepte plusieurs valeurs d'ID

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.