没有参数的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年之间是否有区别?还是它们处理这些问题相同?

Answers:


11

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

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


因此,当不带参数调用sp_executesql时,它与EXEC一样有效吗?
理查德

如果两者产生相同的执行计划,则是,性能必须相同。您可能会争辩说,参数嗅探可能会导致sp_executesql出现问题,但其原因和解决方案与存储过程相同。
Mark Storey-Smith,

2

这帮助我完成了采访,这就是为什么我要发布帮助某人的消息。

在此处输入图片说明

祝好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.