使用以下方法在SQL Server的存储过程中执行动态SQL命令的实际利弊是什么?EXEC (@SQL)与EXEC SP_EXECUTESQL @SQL?
3 回答
收到一只叮咚
TA贡献1821条经验 获得超4个赞
sp_executesql更有可能促进查询计划的重用。使用时sp_executesql,将在调用签名中显式标识参数。这篇优秀的文章描述了这一过程。
关于动态SQL的许多方面,经常引用的参考资料是Erland Sommarskog的必读内容:“ 动态SQL的诅咒和祝福 ”。
陪伴而非守候
TA贡献1757条经验 获得超8个赞
Microsoft的《使用sp_executesql》文章建议使用sp_executesql代替execute语句。
因为此存储过程支持参数替换,所以sp_executesql比EXECUTE具有更多的功能;并且由于sp_executesql生成的执行计划更有可能被SQL Server重用,因此sp_executesql 比EXECUTE 更有效。
所以,带走:不要使用executestatement。使用sp_executesql。
江户川乱折腾
TA贡献1851条经验 获得超5个赞
这些天我总是会使用sp_executesql,实际上它只是EXEC的包装程序,用于处理参数和变量。
但是,当在非常大的数据库上优化查询时,不要忘记OPTION RECOMPILE,尤其是当您的数据跨多个数据库并且使用CONSTRAINT限制索引扫描时。
除非您使用OPTION RECOMPILE,否则SQL Server将尝试为查询创建“一刀切”的执行计划,并将在每次运行时运行全索引扫描。
这比查找效率低得多,这意味着它可能正在扫描整个索引,这些索引被限制在甚至不查询的范围内:@
- 3 回答
- 0 关注
- 1411 浏览
添加回答
举报
0/150
提交
取消