一直使用存储过程的缺点是什么?

ato*_*erz 3 sql stored-procedures sql-server-2008

我读了一本关于SQLServer 2008的书.在这本书中,作者说尽管存储过程主要是解决方案,但你应该避免一直使用它们.
我知道存储过程是预编译的,因此它们比正常命令运行得更快.另外,因为它们使用参数来传递数据,所以在SQL注入攻击的情况下,它们比普通的SQL命令更安全.
所以我不明白的是:为什么不总是使用存储过程?

rem*_*rel 5

一篇关于这个主题的好文章

http://www.codinghorror.com/blog/2004/10/who-needs-stored-procedures-anyways.html

所以我认为你应该做你喜欢的事.没有性能差异(对于您必须运行的查询的msot).

我会说没有存储过程:存储过程是痛苦的...:

  • 没有超载:如果你想添加一个参数,你必须更新所有的呼叫(或创建一个新的SP)

  • 没有复杂的类型:使用动态sql,你可以根据你的复杂对象构建你想要的所有sql过滤器

  • securiy不是一个原因:如果您的sql查询是sql注入证明并且您的数据库不适用于所有人,您可以在应用程序级别处理您的数据访问安全策略(任何dba都会杀了我说这个,但任何开发者都会同意. .. 我猜)

SP是"预编译"的(在第一次执行时,数据库服务器会找到最佳的执行计划,对于SQL服务器),但在我们的时间我们可以忘记它,"编译"的时间真的很少,所以我们不要我不得不担心它.当我认为"OMG编译时间是我的应用程序瓶颈"时,我从未见过一个案例,大部分时间你的应用程序瓶颈都是查询本身,所以当你不需要时不要担心性能.

这个"预编译"取决于您发送给SP的参数(在第一次调用时),因此有时您可能会遇到很多性能问题(称为"参数嗅探")与SP(请参阅此处:http:// www.sqlpointers.com/2006/11/parameter-sniffing-stored-procedures.html).