什么是存储过程?

什么是存储过程? 他们如何工作? 什么是存储过程的构成(每个东西都必须是存储过程)?


存储过程是一批可以通过多种方式执行的SQL语句。 大多数主要DBM支持存储过程; 然而,并非所有人都这样做 您需要验证您的特定DBMS帮助文档。 由于我最熟悉SQL Server,因此我将使用它作为示例。

要创建存储过程,语法非常简单:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

例如:

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个程序! 假设你没有你可能会有的重复。

这是使用ORM或其他方法自动生成基本CRUD操作的地方,它有很多优点。


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

示例:如果我有一个Employee

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

首先,我正在检索Employee表:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

在SQL Server上运行该过程:

Execute   Employee details

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

第二,我将这个值插入Employee Table

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

在SQL Server上运行参数化过程:

Execute employee_insert 003,’xyz’,27,1234567890

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

示例: @Name Varchar(30)

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


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

创建存储过程的示例

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

使用存储过程的优点

  • 存储过程允许模块化编程。

    您可以创建一次该过程,将其存储在数据库中,并在程序中多次调用它。

  • 存储过程允许更快的执行。

    如果操作需要大量重复执行的SQL代码,则存储过程可能会更快。 第一次执行时会对其进行分析和优化,并且存储过程的编译版本将保留在内存高速缓存中供以后使用。 这意味着存储过程无需在每次使用时重新进行重新优化和重新优化,从而缩短执行时间。

  • 存储过程可以减少网络流量。

    需要数百行Transact-SQL代码的操作可以通过执行过程中代码的单个语句执行,而不是通过网络发送数百行代码。

  • 存储过程为您的数据提供更好的安全性

    即使用户没有直接执行过程语句的权限,也可以授予用户执行存储过程的权限。

    在SQL Server中,我们有不同类型的存储过程:

  • 系统存储过程
  • 用户定义的存储过程
  • 扩展存储过程
  • 系统存储过程存储在主数据库中,并以sp_前缀sp_ 。 这些过程可用于执行各种任务,以支持系统表中用于外部应用程序调用的SQL Server功能

    示例:sp_helptext [StoredProcedure_Name]

  • 用户定义的存储过程通常存储在用户数据库中,通常用于完成用户数据库中的任务。 虽然编码这些过程不使用 sp_前缀,因为如果我们首先使用sp_前缀,它将检查master数据库,然后它将转到用户定义的数据库。

  • 扩展存储过程是从DLL文件调用函数的过程。 现在,扩展存储过程已被弃用,原因是避免使用扩展存储过程会更好。

  • 链接地址: http://www.djcxy.com/p/71577.html

    上一篇: What is a stored procedure?

    下一篇: How can I convert my Java program to an .exe file?