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

SQL Server utilise EXEC/sp_executesql ou simplement sql dans une procédure stockée ?

Ne voyez aucune raison d'utiliser SQL dynamique ici. Quand vous faites besoin d'utiliser SQL dynamique, vous devriez considérer sp_executesql supérieur de préférence à EXEC() . Il existe diverses raisons, notamment :

  1. sp_executesql est plus susceptible de réutiliser les plans de requête (voir Dynamic SQL - EXEC(@SQL) contre EXEC SP_EXECUTESQL(@SQL) );

  2. il est beaucoup plus facile de passer des paramètres fortement typés dans sp_executesql (déjouer mieux l'injection SQL que concaténer une chaîne) ; et,

  3. vous pouvez également récupérer des variables de l'étendue SQL dynamique vers l'étendue appelante, par exemple :

Ce n'est pas un exemple très utile, mais c'est un problème courant lors de l'exécution de chaînes dynamiques. Mais plus précisément, vous ne devriez envisager le SQL dynamique que lorsque vous le devez, et non en premier recours.