パラメータなしの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で問題が発生する可能性があると主張できますが、原因と解決策はストアドプロシージャの場合と同じです。
Mark Storey-Smith

2

これは私がインタビューを解読するのに役立ちました。それが私が誰かのために同じことをするために投稿している理由です。

ここに画像の説明を入力してください

幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.