Sql 存储过程还是内联查询?

Sql 存储过程还是内联查询?,sql,stored-procedures,subsonic,Sql,Stored Procedures,Subsonic,首先,关于这一点有一个明确的答案,但这并不完全是我所要求的,所以,请容忍我,继续努力 我的问题是,看了Rob Connery的精彩视频后,我需要问:我们是使用这样的工具进行内联查询,还是使用调用存储过程进行查询? 我不想把Rob的任何工作减到最少(我认为这很了不起),但我只是想让你对这项事业有意见,我需要开始一个新的项目,我在中间。我应该使用亚音速(或其他类似工具,如NHibernate)还是继续我的方法,即始终调用存储过程,即使它是一个简单的 Select this, that from my

首先,关于这一点有一个明确的答案,但这并不完全是我所要求的,所以,请容忍我,继续努力

我的问题是,看了Rob Connery的精彩视频后,我需要问:我们是使用这样的工具进行内联查询,还是使用调用存储过程进行查询?

我不想把Rob的任何工作减到最少(我认为这很了不起),但我只是想让你对这项事业有意见,我需要开始一个新的项目,我在中间。我应该使用亚音速(或其他类似工具,如NHibernate)还是继续我的方法,即始终调用存储过程,即使它是一个简单的

Select this, that from myTable where myStuff = StackOverflow;

它不需要是一个或另一个。如果是简单的查询,请使用亚音速查询工具。如果更复杂,请使用存储过程并加载集合或根据结果创建数据集


参见此处:此处

参见答案和。我会尽可能地使用存储过程,除非繁文缛节意味着需要一周的时间才能进入数据库。

我个人不会遵守严格的规则。当然,在开发阶段,您希望能够快速更改查询,以便我将它们内联

稍后,我将转到存储过程,因为它们提供以下两个优点。我相信还有更多,但这两个人让我赢得了胜利

1/存储过程将数据和用于在一个点上操作/提取该数据的代码分组。这使您的DBA的生活更加轻松(假设您的应用程序足够大,足以保证DBA),因为它们可以基于已知因素进行优化

DBA的一个大麻烦是即席查询(特别是那些不知道什么是全表扫描的小丑)。DBA更喜欢具有良好的一致性查询,以便对数据库进行调优

2/存储过程可以包含最好留在数据库中的逻辑。我见过DB2/z中的存储过程有很多行,但客户机只需编写一行代码,如“给我那个列表”


由于“该列表”的逻辑存储在数据库中,因此DBA可以随意修改其存储和提取方式,而不会影响或更改客户机代码。这类似于使面向对象的语言比以前更“干净”的封装。

当您有多个应用程序依赖于同一数据库时,存储过程是黄金。它允许您定义和维护一次查询逻辑,而不是几个地方


另一方面,存储过程本身很容易在数据库中变成一团乱麻,因为大多数系统都没有一种很好的逻辑组织方法。而且它们可能更难版本化和跟踪更改。

我混合使用了内联查询和存储过程。我更喜欢使用存储过程/视图方法,因为如果需要的话,它为您提供了一个进行更改的好位置。当您有内联查询时,您必须始终更改代码以更改内联查询,然后重新滚动应用程序。您还可以在多个位置使用内联查询,因此您需要更改比使用一个存储过程更多的代码

然后,如果必须向存储过程添加参数,则仍然需要更改大量代码

另一个注意事项是存储过程后面的数据更改的频率,在我的工作中,我们有第三方表,这些表可能会分解为规范化的表,或者一个表会过时。在这种情况下,存储过程/视图可以最大限度地减少您对该更改的暴露


我还编写了一个没有存储过程的完整应用程序。它有三节课和10页,根本不值得。我认为这会有一个过度的时候,或者可以被证明是合理的,但它也可以归结为你个人的意见和偏好

您是否只从该应用程序访问数据库

如果没有,那么您最好使用存储过程,这样您就可以拥有与数据库一致的接口

如果您需要进行更改,分发应用程序是否会产生重大成本

如果是这样,那么您最好使用存储过程,这些存储过程可以在服务器上更改,并且这些更改不需要分发

您是否担心数据库的安全性

如果是这样,那么您可能希望使用存储过程,这样就不必向用户授予对表的直接访问权


如果您正在为一个不会在应用程序之外使用或访问的系统编写一个小型应用程序,而没有广泛的受众,那么内联SQL可能还可以。

我更喜欢内联SQL,除非存储过程涉及实际逻辑(变量、游标等)。我最近一直在使用LINQtoSQL,并获取生成的类,添加具有一些预定义的公共LINQ查询的部分类。我觉得这有利于更快的发展


编辑:我知道我会为此感到沮丧。如果您曾经对外键或存储过程轻声细语,您将被轻声修改。DBA需要工作安全性,我想…

对于亚音速,您将使用内联、视图和存储过程。亚音速使数据访问变得更容易,但在亚音速查询中不能做任何事情。尽管是最新版本,2.1正在变得更好

对于基本的CRUD操作,内联SQL将是直接的。对于更复杂的数据需求,需要创建一个视图,然后对该视图执行亚音速查询

存储过程有利于更难的数据计算和数据检索。基于集合的检索通常比过程处理更快

当前的亚音速应用程序使用了所有三个选项,效果非常好

  • 存储过程将数据和用于在一个点上操作/提取该数据的代码分组。这使得