我正在编写一个.NET应用程序并且想知道......我应该为每个查询编写存储过程,还是在这里有一些拇指的作用?
我知道编写SP的好处(比如安全性,不必重新编译代码来更改查询,查询编译).
但我发现自己很多时候我只需要对我的数据库进行简单的选择或删除操作(非常简单的东西 - 没有参数) - 所以你认为更好 - 为每个查询编写存储过程或有一些硬编码的查询?我有一些项目,我发现自己有很多存储过程,因为那...
谢谢
存储过程引用了一些选项:
性能:这种情况多年来都不存在 - 这些天sprocs和参数化的raw命令共享完全相同的缓存
"如果需要,dba可以更改它" - 如果dba在没有经过适当的部署过程的情况下更改代码,我将不仅会对它们大喊大叫 - 如果你的c#比3次点击更难部署:修复
安全性:这个确实有一些优点,但仅限于银行等非常有限的情况; 并注意-这里的关键是,电话帐户有时没有任何对原始表的访问:只是存储过程.我们大多数人都不在这种环境中工作
就个人而言,我很少使用sprocs.原始SQL更灵活 - 合理的c#代码可以动态编写适当的SQL.你也可以在SQL中做到这一点,但它不适合.您还可以使用ORM等工具.更重要的是,它避免了一个巨大的部署问题:鸡和鸡蛋的变化.如果sproc更改很重要,则无法在不中断调用方的情况下部署sproc,并且无法在不更新sproc的情况下更新调用方.你有多个服务器调用一个中央数据库.这意味着您需要仔细协调变更,以便两端都满意.如果查询在c#中,则这不是问题:当您更新每个单独的服务器时,它根据定义使用它所期望的查询版本.
基本上,我现在是直接参数化SQL的忠实粉丝.