Quels sont les avantages et les inconvénients réels de l'exécution d'une commande SQL dynamique dans une procédure stockée dans SQL Server à l'aide de
EXEC (@SQL)
contre
EXEC SP_EXECUTESQL @SQL
?
sql
sql-server
dynamic
Machine à cendre
la source
la source
L' article de Microsoft Utilisation de sp_executesql recommande d'utiliser
sp_executesql
au lieu de l'execute
instruction.Donc, à emporter: n'utilisez pas de
execute
déclaration . Utilisezsp_executesql
.la source
sp_executesql
ne peut pas être utilisé pour remplacerexecute
. Peut-être devrais-je mettre le point que j'essaie de souligner comme suit: utilisersp_executesql
au lieu deexecute
autant que possible .J'utiliserais toujours sp_executesql ces jours-ci, tout ce que c'est vraiment est un wrapper pour EXEC qui gère les paramètres et les variables.
Cependant, n'oubliez pas OPTION RECOMPILE lors du réglage des requêtes sur des bases de données très volumineuses, en particulier lorsque vous avez des données réparties sur plusieurs bases de données et que vous utilisez une contrainte pour limiter les analyses d'index.
À moins que vous n'utilisiez OPTION RECOMPILE, le serveur SQL tentera de créer un plan d'exécution «taille unique» pour votre requête et exécutera une analyse complète de l'index à chaque exécution.
Ceci est beaucoup moins efficace qu'une recherche et signifie qu'il analyse potentiellement des index entiers qui sont contraints à des plages que vous n'interrogez même pas: @
la source
exécuter la commande
la source
int
en SQL dynamique. Notez que @sql est déclaré commevarchar
ounvarchar