由于各种原因,它通常很糟糕。如果您使用面向对象的工作,那么存储过程就不是逻辑的好地方 - 因为您的对象不再存在。一个对象可能在多个表中。
第二。SQL 是一种用于编写复杂逻辑的非常糟糕的语言。它只是没有完成 - SQL Server 允许用 .NET 编写 SP 的原因之一。尝试在 SQL 中计算哈希,你就会明白我的意思——各种字符串操作是另一个领域。脏得要命。
SP 通常是用愚蠢的论点来完成的。像人们为他们辩护的论点这样愚蠢的论点根本不是真的。Frans Bourma 在http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx上列出了最常用的谬误并很好地解释了为什么这些论点大多是愚蠢的胡言乱语- 是的,它是这种程度的白痴(就像人们甚至没有阅读文档或考虑他们实际所说的话,在所有后果中)。
我个人使用存储过程的系统有限,我拥有的系统是: 复杂性有限,但性能高。基本上没有继承,因为对象模型很简单,SP 中的事务逻辑并不太复杂,而且我需要/想要极小的锁定速度,所以某些操作被移到存储过程中。最重要的是,这个特定的应用程序也有一个非常不寻常的对象模型(对象是从各种来源动态流式传输的,从不更新,总是替换,所有更改都必须通过服务而不是在对象上完成 - 有时因为更改是在另一个组织的另一个国家的另一台计算机上“要求”。
一个很好的例子是一个高性能的会计系统(因为它正在跟踪来自全自动交易系统的交易)。每个 SP 中的逻辑并不是很复杂,但我希望尽可能少的 SQL 来回运行。
现在,存储过程的坏方面也很明智。没有适当的测试框架,没有模拟框架,源代码控制 itnegration 有点尴尬(但可以使用正确的工具集)。集成调试?好吧,我非常感谢 Microsoft 和 Visual Studio - 这确实有效(存储过程中的断点 - 非常好)。
我还没有看到一种使用大量存储过程的方法,这种方法没有用完全无聊的论据来辩护——实际上是在证明“员工应该被解雇”的思维水平。也许他们在外面,但我没有看到他们。