为了账号安全,请及时绑定邮箱和手机立即绑定

动态SQL-EXEC(@SQL)与EXEC SP_EXECUTESQL(@SQL)

动态SQL-EXEC(@SQL)与EXEC SP_EXECUTESQL(@SQL)

牛魔王的故事 2019-10-29 14:32:11
使用以下方法在SQL Server的存储过程中执行动态SQL命令的实际利弊是什么?EXEC (@SQL)与EXEC SP_EXECUTESQL @SQL?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

sp_executesql更有可能促进查询计划的重用。使用时sp_executesql,将在调用签名中显式标识参数。这篇优秀的文章描述了这一过程。


关于动态SQL的许多方面,经常引用的参考资料是Erland Sommarskog的必读内容:“ 动态SQL的诅咒和祝福 ”。


查看完整回答
反对 回复 2019-10-29
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

Microsoft的《使用sp_executesql》文章建议使用sp_executesql代替execute语句。


因为此存储过程支持参数替换,所以sp_executesql比EXECUTE具有更多的功能;并且由于sp_executesql生成的执行计划更有可能被SQL Server重用,因此sp_executesql 比EXECUTE 更有效。


所以,带走:不要使用executestatement。使用sp_executesql。


查看完整回答
反对 回复 2019-10-29
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

这些天我总是会使用sp_executesql,实际上它只是EXEC的包装程序,用于处理参数和变量。

但是,当在非常大的数据库上优化查询时,不要忘记OPTION RECOMPILE,尤其是当您的数据跨多个数据库并且使用CONSTRAINT限制索引扫描时。

除非您使用OPTION RECOMPILE,否则SQL Server将尝试为查询创建“一刀切”的执行计划,并将在每次运行时运行全索引扫描。

这比查找效率低得多,这意味着它可能正在扫描整个索引,这些索引被限制在甚至不查询的范围内:@


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 1411 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信