Unterschied zwischen EXEC () und sp_executesql ohne Parameter?

8

Ich habe gerade etwas über die neue gespeicherte Prozedur sp_executesql erfahren. Ich mag die Tatsache, dass es eine Möglichkeit gibt, parametrisierten Code in SQL Server auszuführen.

Ich frage mich jedoch, was der Unterschied zwischen der Verwendung der gespeicherten Prozedur sp_executesql, wenn Sie keine Parameter haben, und dem direkten Aufruf von EXEC ist. Gibt es auch Auswirkungen auf die Leistung?

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

Gibt es auch einen Unterschied zwischen 2005 und 2008 oder behandeln sie diese gleich?

Richard
quelle

Antworten:

11

sp_executesql unterstützt die Parametrisierung, während EXEC nur eine Zeichenfolge akzeptiert.

Nur Leistungsunterschiede, die auftreten können, sind auf die Parametrisierung zurückzuführen, dh ein parametrisierter sp_executesql-Aufruf verfügt mit größerer Wahrscheinlichkeit über einen wiederverwendbaren zwischengespeicherten Plan. Ein EXEC-Aufruf führt wahrscheinlich zu vielen Platzverschwendung für den einmaligen Gebrauch im Plan-Cache.

Mark Storey-Smith
quelle
Wenn sp_executesql ohne Parameter aufgerufen wird, ist es genauso effizient wie EXEC?
Richard
Wenn beide den gleichen Ausführungsplan erstellen, muss die Leistung gleich sein. Sie könnten argumentieren, dass das Sniffing von Parametern Probleme mit sp_executesql verursachen könnte, aber die Ursachen und Lösungen wären dieselben wie für gespeicherte Prozesse.
Mark Storey-Smith
2

Dies hat mir geholfen, das Interview zu knacken, deshalb poste ich, um jemandem dafür zu helfen.

Geben Sie hier die Bildbeschreibung ein

Viel Glück!

pedram
quelle