Diferença entre EXEC () e sp_executesql sem parâmetros?

8

Acabei de aprender sobre o novo procedimento armazenado sp_executesql. Eu gosto do fato de que existe uma maneira de executar código parametrizado no SQL Server.

Mas, eu estou querendo saber qual é a diferença entre usar o procedimento armazenado sp_executesql quando você não possui nenhum parâmetro em vez de apenas chamar EXEC diretamente. Além disso, há uma implicação no desempenho?

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

Além disso, existe uma diferença entre 2005 e 2008 ou eles lidam com o mesmo?

Richard
fonte

Respostas:

11

sp_executesql suporta parametrização, enquanto EXEC aceita apenas uma sequência.

Somente as diferenças de desempenho que podem surgir se devem à parametrização, ou seja, é mais provável que uma chamada parametrizada sp_executesql tenha um plano em cache reutilizável. É provável que uma chamada EXEC leve a muitos desperdícios de espaço de uso único no cache do plano.

Mark Storey-Smith
fonte
Então, quando sp_executesql é chamado sem parâmetros, é tão eficiente quanto o EXEC?
Richard
Se ambos produzirem o mesmo plano de execução, sim, o desempenho deverá ser o mesmo. Você pode argumentar que a detecção de parâmetros pode causar problemas com sp_executesql, mas as causas e soluções são as mesmas dos procs armazenados.
Mark-Storey-Smith
2

Isso me ajudou a decifrar a entrevista, por isso estou postando para ajudar alguém pelo mesmo.

insira a descrição da imagem aqui

Boa sorte!

pedram
fonte