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.