Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server utilizza EXEC/sp_executesql o semplicemente sql nella procedura memorizzata?

Non vedo alcun motivo per utilizzare SQL dinamico qui. Quando fai è necessario utilizzare SQL dinamico, dovresti considerare sp_executesql superiore a EXEC() . Ci sono una serie di ragioni, tra cui:

  1. sp_executesql è più probabile che riutilizzi i piani di query (vedi SQL dinamico - EXEC(@SQL) rispetto a EXEC SP_EXECUTESQL(@SQL) );

  2. è molto più semplice passare parametri fortemente tipizzati in sp_executesql (evitare l'iniezione SQL meglio che concatenare una stringa); e,

  3. puoi anche riportare le variabili dall'ambito SQL dinamico all'ambito chiamante, ad esempio:

Questo non è un esempio molto utile, ma è un problema comune durante l'esecuzione di stringhe dinamiche. Ma più precisamente, dovresti considerare l'SQL dinamico solo quando devi, non come prima risorsa.