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?

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.


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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.