2010-06-16 70 views
3

可能重复:
What are the pros and cons to keeping SQL in Stored Procs versus Code为什么(以及何时)使用存储过程?

什么是适合的方案时,存储过程应使用?

我偶然发现了几乎整个数据操作都是由存储过程处理的,即使是最简单形式的INSERT/DELETE语句也是通过SP来包装和使用的。

那么,一般使用存储过程的基本原理是什么?

对不起,这样的初学者的问题..

+0

另外http://stackoverflow.com/questions/757193/inline-sql-vs-stored-procedures和http://stackoverflow.com/questions/462978/when-should-you-use-stored-procedures – jball 2010-06-16 23:00:18

回答

4

除了原因@Tom已经指出哪些可能是最重要的(速度/安全性)我也会说另一个很好的理由使用Stored程序是代码重用。如果你发现自己在同一个地方编写了相同的SQL,通常它应该是一个存储过程。另外一个好的理由是它不仅允许开发人员,而且DBA可以根据需要更改/添加新的程序。

3

两个原因我知道的:

  1. 安全

,存储过程免受攻击的安全,如SQL注入攻击

  1. 速度

存储过程有时会进行预编译,使执行速度更快。

1

对我来说,这与编程时是否创建函数/方法是一样的问题。

例如,如果需要在许多地方重复该功能,或者将要被多次调用,那么它应该在函数中。

+0

我不是说从使用代码调用存储过程的场景。在这种情况下,你可以在一个方法中包装相同的SQL调用。我试图用SQL来比喻编码,这是詹姆斯比我更好的表述 - >“使用存储过程的好理由是代码重用,如果你发现自己在同一个地方编写相同的SQL,它通常是一个符号它应该是一个存储过程。“不一定来自程序内,但一般数据库维护和来自多个程序/实用程序等。 – Jacob 2010-06-16 23:40:10

1

它允许您保持数据访问附近的数据。我曾在系统中使用服务器端包装函数存储所有数据访问。它很干净(但不像ORM那样“酷”)

1

当其他系统需要访问你的数据,并且你需要在数据库提供一个API时--Proc会让你控制他们访问它的方式/方式。

我从企业角度回答。

+0

好点。虽然我相信在数据和其他系统之间添加层是大多数情况下最好的方法,但我知道,由于定义的目标有时可能无法实现。 – 2010-06-16 23:30:14

0

两种类型的设计,

  1. 把所有/ DB服务器上的大多数业务逻辑
  2. 把全部/大部分应用服务器上的业务逻辑。

在#1中,您使用存储过程来实现您的应用程序逻辑,而不是编程语言。 在#2中,您使用编程语言来实现逻辑,调试更容易,并允许重复使用代码以及任何编程语言提供的所有其他功能。

如果您是数据库专家(并且您的应用程序是中小型),请选择第一种方法,否则请选择第二种方法。

顺便说一句,你会发现.NET应用程序使用第一种方法,而Java应用程序使用第二种方法。

相关问题