Differenza tra EXEC () e sp_executesql senza parametri?


8

Ho appena saputo della nuova procedura memorizzata sp_executesql. Mi piace il fatto che esiste un modo per eseguire codice con parametri all'interno di SQL Server.

Ma mi chiedo quale sia la differenza tra l'uso della procedura memorizzata sp_executesql quando non si hanno parametri rispetto al solo chiamare EXEC direttamente. Inoltre, c'è un impatto sulle prestazioni?

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

Inoltre, c'è una differenza tra il 2005 e il 2008 o li gestiscono allo stesso modo?

Risposte:


11

sp_executesql supporta la parametrizzazione, mentre EXEC accetta solo una stringa.

Solo le differenze di prestazioni che possono sorgere sono dovute alla parametrizzazione, ovvero una chiamata sp_executesql con parametri ha maggiori probabilità di avere un piano memorizzato nella cache riutilizzabile. È probabile che una chiamata EXEC porti a un sacco di dispositivi per lo svuotamento dello spazio monouso nella cache del piano.


Quindi, quando viene chiamato sp_executesql senza parametri, è altrettanto efficace di EXEC?
Richard,

Se entrambi producono lo stesso piano di esecuzione, allora sì, le prestazioni devono essere le stesse. Si potrebbe sostenere che lo sniffing dei parametri potrebbe causare problemi con sp_executesql ma le cause e le soluzioni sarebbero le stesse dei processi memorizzati.
Mark Storey-Smith,

2

Questo mi ha aiutato a decifrare l'intervista ed è per questo che sto postando per aiutare qualcuno per lo stesso.

inserisci qui la descrizione dell'immagine

In bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.