Παρατηρώ ότι αρκετοί προβληματίζονται ή έχουν μπερδευτεί για το πότε πρέπει να χρησιμοποιούν την EXECUTE (περισσότερο γνωστή με την σύντμηση της EXEC) ή την sp_executesql.
Λοιπόν για να βάλουμε τα πράγματα σε σειρά.
EXEC
Η EXEC χρησιμοποιείται για να εκτελέσουμε stored procedures.
Μπορούμε να την χρησιμοποιήσουμε και για την εκτέλεση dynamic queries αλλά αυτά (πλην ελαχίστων εξαιρέσεων) είναι sql injected vulnerable.
sp_executesql
H sp_executesql είναι system stored procedure που έχει δημιουργηθεί για την εκτέλεση dynamic queries και επειδή έχει την δυνατότητα να υποστηρίζει parameterized queries μέσα από την χρήση των parameters που έχει δεν είναι sql injected vulnerable.
Επίσης όταν εκτελούμε ένα dynamic query με την sp_executesql γίνεται επαναχρησιμοποίηση του execution plan άρα έχω καλύτερο performance.
End of story.
//Antonios Chatzipavlis