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

什么是存储过程?

什么是存储过程?

慕容708150 2019-11-21 13:51:36
什么是存储过程?它们如何工作?存储过程的组成是什么(每个事物都必须是存储过程)?
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

存储过程是可以以两种方式执行的一批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
?
慕森王

TA贡献1777条经验 获得超3个赞

存储过程是一组已创建并存储在数据库中的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
  • 3 回答
  • 0 关注
  • 804 浏览
慕课专栏
更多

添加回答

举报

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