前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详细讲解什么是存储过程

详细讲解什么是存储过程

原创
作者头像
Blue_007
修改2023-11-01 22:21:38
4950
修改2023-11-01 22:21:38
举报
文章被收录于专栏:代码生涯代码生涯

🎏 一、存储过程的概念

  1. 存储过程(procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行
  2. 存储过程中可以包含逻辑控制语句和数据操纵语句(增删改查),它可以接受参数、输出参数、返回单个或多个结果集以及返回值
  3. 由于存储过程在创建时就在数据库服务器上进行了编译并存储在数据库,所以存储过程运行要比单个的SQL语句块要快;
  4. 同时由于在调用时只需用提供存储过程名必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担

🎍 二、存储过程的优、缺点

🚘 2.1 优点

  1. 安全,调用者只需要知道如何调用指定的存储过程即可,而不用关心存储过程的内容,防止SQL注入
  2. 提高性能,使用存储过程比使用单独的SQL语句要快,如果某一操作包含大量的SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多
  3. 不必重新编写,通过把多条SQL语句封装在简单易用的单元中,简化复杂的操作存储过程创建后,可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句;
  4. 存储过程减轻网络流量,对于针对同一个数据库对象的操作,这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句,从而减轻了网络流量,降低了网络负载

🎠 2.1 缺点

  1. 编写复杂;
  2. 如果没有相应的权限,将无法创建存储过程
  3. 当服务器调用过多存储过程,用户访问量大了,那么压力就丢给数据库来解决,数据库压力会过大;
  4. 过多的存储过程,优化过于麻烦。

🛒 三、系统存储过程

SQL Server中存在很多的系统存储过程,系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息,或完成与更新数据库表相关的管理任务,或其他的系统管理任务。

系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。

这些系统存储过程在master数据库中,但我们在其他数据库还是可以调用系统存储过程。

常用系统存储过程有

存储过程

含义

exec sp_databases;

查看所有数据库

exec sp_helpdb;

查询数据库信息

exec sp_helpdb 数据名;

查询指定数据库信息

exec sp_renamedb ‘旧库名’, ‘新库名’;

更改数据库名称

exec sp_tables;

查询当前数据库的所有表

exec sp_columns 表名;

查看列

exec sp_help 表名;

返回表的所有信息

exec sp_helpIndex 表名;

查看索引

exec sp_helpConstraint 表名;

约束

exec sp_stored_procedures;

当前环境的所有存储

exec sp_helptext ‘存储过程’;

查看存储过程源码

exec sp_rename ‘旧名’, ‘新名’;

修改表、索引、列的名称

exec sp_defaultdb ‘旧库名’, ‘新库名’;

更改登录名的默认数据库

注意:

exec 用于调用存储过程

👝 3.1 系统存储过程示例

① 表重命名语法:

代码语言:sql
复制
exec sp_rename 'stu', 'stud';

② 列重命名语法:

代码语言:sql
复制
exec sp_rename '表名.旧列名', '新列名','column';

③ 重命名索引语法:

代码语言:sql
复制
exec sp_rename N'student.idx_cid',N'idx_cidd', N'index';

④ 查询所有存储过程语法:

补充: P 为 “存储过程”

代码语言:sql
复制
select * from sys.objects where type = 'P';

🥍 四、自定义存储过程

🏆 4.1 创建语法

代码语言:sql
复制
create proc | procedure 存储名(
  [{@参数 数据类型} [=默认值] [out|output],
   {@参数 数据类型} [=默认值] [out|output],
  ....]
)
as
begin
   SQL_statements
end
go

注意:

默认不写是输入变量; out输出变量; output输入输出变量; 参数可以写小括号中,如果没有参数,小括号可以省略不写;

🧸 4.2 修改语法

代码语言:sql
复制
alter proc | procedure 存储过程名
as
beign
   sql语句;
end

👒 4.3 删除语法

代码语言:sql
复制
drop proc | procedure 存储过程名;

🎼 4.4 调用语法

不带参数的调用

代码语言:sql
复制
exec 存储过程名;

带参数的调用

代码语言:sql
复制
exec 存储过程名 参数1 out|output,参数2 out|output;

Java-MyBatis

代码语言:html
复制
<select id="GET_MarketSupplierInfo" statementType="CALLABLE" resultType="map">
   {
      call 存储过程名(
         #{参数名1,mode=IN,jdbcType=VARCHAR},
         #{参数名2,mode=IN,jdbcType=VARCHAR}
      )
   }
</select>

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🎏 一、存储过程的概念
  • 🎍 二、存储过程的优、缺点
    • 🚘 2.1 优点
      • 🎠 2.1 缺点
      • 🛒 三、系统存储过程
        • 👝 3.1 系统存储过程示例
        • 🥍 四、自定义存储过程
          • 🏆 4.1 创建语法
            • 🧸 4.2 修改语法
              • 👒 4.3 删除语法
                • 🎼 4.4 调用语法
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档