如果我们需要一些只能通过动态查询实现的信息,那么它不应该直接在应用程序代码中(在DAL中)而不是在存储过程中写入吗?
因为如果我们在其中使用动态查询(即已经保存的执行执行计划),我们已经失去了从SP获得的好处。
答案 0 :(得分:2)
除了执行计划缓存功能之外,还有许多其他facets of stored procedures需要考虑,所以我认为仅仅因为它们将包含一个临时查询而忽略它们的使用是公平的。
(另外值得注意的是,正确形成的动态SQL位是执行计划重用的no barrier)
答案 1 :(得分:2)
如果您的应用程序当前只调用存储过程,那么保持它一致并调用存储过程并在那里执行动态SQL。
如果你的应用程序已经充满了生成的SQL语句,那么只需在那里构建动态SQL。
请记住,使用存储过程动态生成SQL不会保护您免受注入攻击。但是,程序的参数类型和大小限制可以帮助减少注射风险。