Разница между EXEC () и sp_executesql без параметров?


8

Я только что узнал о новой хранимой процедуре sp_executesql. Мне нравится тот факт, что есть способ выполнить параметризованный код из SQL Server.

Но мне интересно, в чем разница между использованием хранимой процедуры sp_executesql, когда у вас нет никаких параметров, и простым вызовом EXEC напрямую. Кроме того, есть ли влияние на производительность?

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

Кроме того, есть ли разница между 2005 и 2008 годами или они обрабатывают их одинаково?

Ответы:


11

sp_executesql поддерживает параметризацию, тогда как EXEC принимает только строку.

Только различия в производительности, которые могут возникнуть, связаны с параметризацией, т.е. параметризованный вызов sp_executesql с большей вероятностью будет иметь кешируемый план многократного использования. Вызов EXEC может привести к большому количеству одноразовых потерь пространства в кэше плана.


Итак, когда sp_executesql вызывается без параметров, это так же эффективно, как EXEC?
Ричард

Если оба производят один и тот же план выполнения, то да, производительность должна быть одинаковой. Можно утверждать, что сниффинг параметров может вызвать проблемы с sp_executesql, но причины и решения будут такими же, как и для хранимых процедур.
Марк Стори-Смит

2

Это помогло мне взломать интервью, поэтому я пишу, чтобы помочь кому-то за то же самое.

введите описание изображения здесь

Удачи!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.