没有参数的 EXEC() 和 sp_executesql 之间的区别?

Ric*_*ard 10 sql-server-2005 sql-server-2008 t-sql

我刚刚了解了新的 sp_executesql 存储过程。我喜欢有一种方法可以从 SQL Server 中执行参数化代码。

但是,我想知道在没有任何参数时使用 sp_executesql 存储过程与直接调用 EXEC 之间有什么区别。另外,是否有性能影响?

exec('select * from line_segment')
exec sp_executesql N'select * from line_segment'
Run Code Online (Sandbox Code Playgroud)

另外,2005 年和 2008 年之间是否存在差异,或者它们的处理方式是否相同?

Mar*_*ith 13

sp_executesql 支持参数化,而 EXEC 只接受字符串。

只有可能出现的性能差异是由参数化引起的,即参数化的 sp_executesql 调用更有可能具有可重用的缓存计划。EXEC 调用可能会导致计划缓存中出现大量一次性空间浪费。