为了账号安全,请及时绑定邮箱和手机立即绑定

什么是存储过程?

/ 猿问

什么是存储过程?

慕容708150 2019-11-21 13:51:36

什么是存储过程?它们如何工作?存储过程的组成是什么(每个事物都必须是存储过程)?



查看完整描述

3 回答

?
茅侃侃

存储过程是可以以两种方式执行的一批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操作有很多优点。


查看完整回答
反对 回复 2019-11-21
?
BIG阳

存储过程是一组用于执行特殊任务的预编译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)。


查看完整回答
反对 回复 2019-11-21
?
慕森王

存储过程是一组已创建并存储在数据库中的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文件调用函数的过程。如今,不建议使用扩展存储过程,因为最好避免使用扩展存储过程。


查看完整回答
反对 回复 2019-11-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信