Différence entre EXEC () et sp_executesql sans paramètres?

8

Je viens d'apprendre la nouvelle procédure stockée sp_executesql. J'aime le fait qu'il existe un moyen d'exécuter du code paramétré à partir de SQL Server.

Mais, je me demande quelle est la différence entre l'utilisation de la procédure stockée sp_executesql lorsque vous n'avez aucun paramètre et le simple fait d'appeler EXEC directement. Y a-t-il également une implication de performance?

exec('select * from line_segment')
exec sp_executesql N'select * from line_segment'

De plus, y a-t-il une différence entre 2005 et 2008 ou gèrent-ils la même chose?

Richard
la source

Réponses:

11

sp_executesql prend en charge le paramétrage, tandis qu'EXEC accepte uniquement une chaîne.

Seules les différences de performances qui peuvent survenir sont dues au paramétrage, c'est-à-dire qu'un appel sp_executesql paramétré est plus susceptible d'avoir un plan en cache réutilisable. Un appel EXEC est susceptible d'entraîner de nombreux gaspilleurs d'espace à usage unique dans le cache du plan.

Mark Storey-Smith
la source
Ainsi, lorsque sp_executesql est appelé sans paramètres, il est tout aussi efficace qu'EXEC?
Richard
Si les deux produisent le même plan d'exécution, alors oui, les performances doivent être les mêmes. Vous pourriez faire valoir que le reniflage de paramètres pourrait causer des problèmes avec sp_executesql mais les causes et les solutions seraient les mêmes que pour les proc stockés.
Mark Storey-Smith,
2

Cela m'a aidé à déchiffrer l'interview, c'est pourquoi je poste pour aider quelqu'un pour la même chose.

entrez la description de l'image ici

Bonne chance!

pedram
la source