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

使用以下方法在SQL Server的存储过程中执行动态SQL命令的实际利弊是什么?


EXEC (@SQL)


EXEC SP_EXECUTESQL @SQL


牛魔王的故事
浏览 1412回答 3
3回答

收到一只叮咚

sp_executesql更有可能促进查询计划的重用。使用时sp_executesql,将在调用签名中显式标识参数。这篇优秀的文章描述了这一过程。关于动态SQL的许多方面,经常引用的参考资料是Erland Sommarskog的必读内容:“ 动态SQL的诅咒和祝福 ”。

陪伴而非守候

Microsoft的《使用sp_executesql》文章建议使用sp_executesql代替execute语句。因为此存储过程支持参数替换,所以sp_executesql比EXECUTE具有更多的功能;并且由于sp_executesql生成的执行计划更有可能被SQL Server重用,因此sp_executesql 比EXECUTE 更有效。所以,带走:不要使用executestatement。使用sp_executesql。

江户川乱折腾

这些天我总是会使用sp_executesql,实际上它只是EXEC的包装程序,用于处理参数和变量。但是,当在非常大的数据库上优化查询时,不要忘记OPTION RECOMPILE,尤其是当您的数据跨多个数据库并且使用CONSTRAINT限制索引扫描时。除非您使用OPTION RECOMPILE,否则SQL Server将尝试为查询创建“一刀切”的执行计划,并将在每次运行时运行全索引扫描。这比查找效率低得多,这意味着它可能正在扫描整个索引,这些索引被限制在甚至不查询的范围内:@
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server