当前位置:  开发笔记 > 编程语言 > 正文

什么是存储过程?

如何解决《什么是存储过程?》经验,为你挑选了8个好方法。

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



1> JoshBerke..:

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

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

CREATE PROCEDURE .

      

AS

     

例如:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

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

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

存储过程确实存在缺点,基本上是与基本CRUD操作相关的维护.假设每个表都有一个Insert,Update,Delete和至少一个基于主键的select,这意味着每个表将有4个过程.现在拿一个体面的400桌的数据库,你有1600个程序!而且假设你没有重复,你可能会.

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


是的,这是一种可能的方法.我们使用ORM来报告所有内容

2> sidhewsar..:

存储过程是一组预编译的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表

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).



3> Kanwar Singh..:

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

创建存储过程的示例

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

使用存储过程的优点

存储过程允许模块化编程.

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

存储过程允许更快的执行.

如果操作需要重复执行大量SQL代码,则存储过程可以更快.它们在首次执行时被解析和优化,并且存储过程的编译版本保留在内存高速缓存中供以后使用.这意味着存储过程不需要在每次使用时重新分析和重新优化,从而导致更快的执行时间.

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

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

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

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

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

系统存储过程

用户定义的存储过程

扩展存储过程

系统存储过程存储在master数据库中,并以sp_前缀开头.这些过程可用于执行各种任务,以支持系统表中的外部应用程序调用的SQL Server函数

示例:sp_helptext [StoredProcedure_Name]

用户定义的存储过程通常存储在用户数据库中,通常用于完成用户数据库中的任务.尽管编码这些程序不使用sp_前缀,因为如果我们使用的sp_第一个前缀,它会检查主数据库,然后它涉及到用户定义的数据库.

扩展存储过程是从DLL文件调用函数的过程.现在,不推荐使用扩展存储过程,因为最好避免使用扩展存储过程.



4> Dave Swersky..:

通常,存储过程是"SQL函数".他们有:

-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID

这是一个以T-SQL为重点的例子.存储过程可以执行大多数SQL语句,返回标量和基于表的值,并且被认为更安全,因为它们可以防止SQL注入攻击.



5> Supun Wijera..:

想想这样的情况,

你有一个包含数据的数据库.

访问该中央数据库需要许多不同的应用程序,并且将来也会有一些新的应用程序.

如果要插入内联数据库查询以访问中央数据库,在每个应用程序的代码中单独进行,那么可能您必须在不同的应用程序代码中反复复制相同的查询.

在这种情况下,您可以使用存储过程(SP).使用存储过程,您将编写许多常见查询(过程)并将其与中央数据库一起存储.

现在重复工作将永远不会像以前那样发生,数据访问和维护将集中完成.

注意:

在上面的情况中,您可能想知道"为什么我们不能引入中央数据访问服务器来与所有应用程序交互?是的.这将是一种可能的替代方案.但是,

SP与该方法相比的主要优点是,与具有内联查询的数据访问代码不同,SP是预编译语句,因此它们将更快地执行.通信成本(通过网络)将是最小的.

与此相反,SP将为数据库服务器增加一些负载.如果根据情况需要考虑,那么具有内联查询的集中式数据访问服务器将是更好的选择.



6> MADHAIYAN M..:

存储过程主要用于在数据库上执行某些任务.例如

从数据的某些业务逻辑中获取数据库结果集.

在一次调用中执行多个数据库操作.

用于将数据从一个表迁移到另一个表.

可以调用其他编程语言,如Java.



7> 小智..:

存储过程用于检索数据,修改数据和删除数据库表中的数据.每次要在SQL数据库中插入,更新或删除数据时,都不需要编写完整的SQL命令.



8> 小智..:

存储过程只不过是一组编译成单个执行计划的SQL语句.

    创建一次并多次调用它

    它减少了网络流量

示例:创建存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
      SET NOCOUNT ON;

      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Employees 
      WHERE EmployeeID = @EmployeeID
END
GO

更改或修改存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT FirstName, LastName, BirthDate, City, Country
    FROM Employees 
    WHERE EmployeeID = @EmployeeID
END
GO

删除或删除存储过程:

DROP PROCEDURE GetEmployee

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有