首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是存储过程?

什么是存储过程?
EN

Stack Overflow用户
提问于 2009-01-19 22:33:24
回答 16查看 576.6K关注 0票数 326

什么是“存储过程”,它们是如何工作的?

存储过程的组成是什么(每个存储过程都必须是存储过程)?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-01-19 22:57:15

存储过程是一批SQL语句,可以通过几种方式执行。大多数主要的DBMs支持存储过程;然而,并不是所有的数据库管理系统都支持。您需要使用特定的DBMS帮助文档来验证细节。由于我最熟悉Server,所以我将使用它作为我的示例。

要创建存储过程,语法相当简单:

代码语言:javascript
复制
CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

例如:

代码语言:javascript
复制
CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

存储过程的一个好处是,您可以将数据访问逻辑集中到一个地方,这样DBA就可以轻松地进行优化。存储过程还具有安全性好处,因为您可以将执行权限授予存储过程,但用户不需要对基础表具有读/写权限。这是对抗SQL注入的第一步。

存储过程也有缺点,基本上是与基本CRUD操作相关联的维护。假设每个表都有一个Insert、Update、Delete和至少一个基于主键的选择,这意味着每个表将有4个过程。现在拿一个相当大的数据库400张表,你有1600程序!这是假设你没有重复的,你很可能会。

这就是使用奥姆或其他方法自动生成基本CRUD操作的地方。

票数 262
EN

Stack Overflow用户

发布于 2013-06-13 10:16:48

存储过程是用于执行特殊任务的一组预编译SQL语句。

示例:如果我有一个Employee

代码语言:javascript
复制
Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

首先,我将检索Employee表:

代码语言:javascript
复制
Create Procedure Employee details
As
Begin
    Select * from Employee
End

若要在Server上运行该过程,请执行以下操作:

代码语言:javascript
复制
Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

其次,我要将值插入员工表中。

代码语言:javascript
复制
Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

若要在Server上运行参数化过程:

代码语言:javascript
复制
Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

示例:@Name Varchar(30)

Employee表中,Name列的大小必须是varchar(30)

票数 159
EN

Stack Overflow用户

发布于 2014-04-09 12:01:47

存储过程是已创建并存储在数据库中的一组SQL语句。存储过程将接受输入参数,因此多个客户端可以使用不同的输入数据通过网络使用单个过程。存储过程将减少网络流量并提高性能。如果修改存储过程,所有客户端都将得到更新的存储过程。

创建存储过程的示例

代码语言:javascript
复制
CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

使用存储过程的优点

  • 存储过程允许模块化编程。 您可以创建过程一次,将其存储在数据库中,并在程序中任意次数调用它。
  • 存储过程允许更快的执行。 如果操作需要大量重复执行的SQL代码,则存储过程可能会更快。它们在第一次执行时被解析和优化,存储过程的编译版本保留在内存缓存中供以后使用。这意味着存储过程不需要根据每次使用进行重新分析和重新优化,从而导致更快的执行时间。
  • 存储过程可以减少网络流量。 需要数百行Transact-SQL代码的操作可以通过在过程中执行代码的单个语句来执行,而不是通过网络发送数百行代码。
  • 存储过程为数据提供了更好的安全性。 即使用户没有直接执行过程语句的权限,也可以授予他们执行存储过程的权限。 在Server中,有不同类型的存储过程:
代码语言:javascript
复制
- System stored procedures
- User-defined stored procedures
- Extended stored Procedures

  • System-stored过程存储在主数据库中,这些过程以sp_前缀开始。这些过程可用于执行各种任务,以支持系统表中的外部应用程序调用的Server功能 例子: sp_helptext StoredProcedure_Name
  • User-defined存储过程通常存储在用户数据库中,通常用于完成用户数据库中的任务。在编写这些过程时,不使用-- sp_前缀,因为如果我们首先使用sp_前缀,它将检查主数据库,然后再检查用户定义的数据库。
  • 扩展存储过程是从DLL文件调用函数的过程。现在,由于最好避免使用扩展存储过程,所以不建议使用扩展存储过程。
票数 85
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/459457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档