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

Ash*_*ine 90 sql sql-server dynamic

在SQL Server中使用存储过程执行动态SQL命令的真实优点和缺点是什么?

EXEC (@SQL)
Run Code Online (Sandbox Code Playgroud)

EXEC SP_EXECUTESQL @SQL
Run Code Online (Sandbox Code Playgroud)

Mit*_*eat 93

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

对于动态SQL的许多方面,经常引用的参考文献是Erland Sommarskog必须阅读:" 动态SQL的诅咒和祝福 ".


DJ.*_*DJ. 20

SP_EXECUTESQL的重要一点是,它允许您创建参数化查询,如果您关心SQL注入,这非常好.


Gan*_*Gan 5

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

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

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

  • 您的外卖并不总是站得住脚的。有时使用sp_executesql不会带来任何效率提高,但是您可以保护代码免受sql注入攻击。有时您只是不能像使用exec那样使用sp_executesql,所以...有人说-没有灵丹妙药。我同意。 (7认同)