当前位置:网站首页>Stored Procedure && Trigger
Stored Procedure && Trigger
2022-08-05 16:37:00 【鲨鱼辣椒的小地摊儿】

Stored Procedure && Trigger
资料链接: https://www.w3cschool.cn/sql/sql-storage.html.
1.Store Procedure
存储过程(Stored Procedure),是一组为了完成特定功能的SQL语句
1.1 Charactor
优点:
- 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。
- 当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
- 一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
- 存储过程可以重复使用,可减少数据库开发人员的工作量。
- 安全性高,可设定只有某些用户才具有对指定存储过程的使用权
缺点
- 调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。
- 移植问题,数据库端代码当然是与数据库相关的。
- 重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
- 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
1.2 Type
- 系统存储过程
以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。- 本地存储过程
用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。- 临时存储过程
分为两种存储过程:
一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;
二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。- 远程存储过程
在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。- 扩展存储过程
扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。
1.3 Parameters
procedure_name:存储过程的名称,在前面加#为局部临时存储过程,加##为全局临时存储过程。number:是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。@parameter:存储过程的参数。可以有一个或多个。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2100 个参数。
使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。data_type:参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。VARYING:指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。default: 参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。OUTPUT:表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。RECOMPILE: 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。ENCRYPTION: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。 说明在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。FOR REPLICATION:指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用AS:指定过程要执行的操作。sql_statement:过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。
1.4 Create

下面是用一张Student表做Demo

- 无参数存储过程,选出Student表中的所有信息
create proc StuProc
as
begin
select S#,Sname,Sage,Ssex from student
end
go
- 有参数存储过程,选出指定姓名的学生信息(全局变量)
create proc StuProc
@sname varchar(100)
as
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc '赵雷' //执行语句
- 有参数存储过程,选出指定姓名的学生信息(全局变量),内部直接设置
create proc StuProc
@sname varchar(100)='赵雷'
as
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc
- 有参数存储过程,选出指定姓名的学生信息(全局变量),还可以打印变量
create proc StuProc
@sname varchar(100),
@IsRight int output //传出参数
as
if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
set @IsRight =1
else
set @IsRight=0
go
declare @IsRight int
exec StuProc '赵雷' , @IsRight output
select @IsRight
- 有参数存储过程,选出指定姓名的学生信息(局部变量)
create proc StuProc
as
declare @sname varchar(100)
set @sname='赵雷'
select S#,Sname,Sage,Ssex from student where sname=@sname
go
exec StuProc
- 有参数存储过程,选出指定姓名的学生信息(局部变量)
create proc StuProc
as
declare @sname varchar(100)
set @sname=(select Sname from student where S#=01)
select @sname
go
exec StuProc

1.5 Execute
- 存储过程可以在三种环境下被调用:
command命令下,基本语法为:exec sp_name [参数名]
SQL环境下,基本语法为:call sp_name [参数名]
PL/SQL环境下,基本语法为:begin sp_name [参数名] end
1.6 Delete
- 基本语法:
drop procedure sp_name- 注意事项
不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
2.Trigger
边栏推荐
- Visual Studio Code如何新建一个工程
- 边境的悍匪—机器学习实战:第十七章 使用自动编码器和GAN的表征学习和生成学习
- Registered less than a week for data security in the British parliament TikTok dispute the substance is discontinued
- 高数_证明_介值定理
- 面向动态图的极低时延 GNN 在线推理采样服务
- 基于consul的服务注册与消费案例
- 裁员欠薪,黄光裕没能让国美真快乐
- Mapping of gpnmb+ gpnmb- AT2 cells on idling Mapping----version 3.2.2seurat
- 五个方法,破解数据分析的核心难题
- 他,高中毕业,46岁收获一个360亿IPO
猜你喜欢

今年考研?七夕顺便把心形线复习一下

How to use MATLAB to preprocess CSI data (Kalman filter)

小型企业CIO为大型企业IT负责人提供的重要经验

左益豪:用代码创造一个新世界|OneFlow U
![[Case] A rotating circle in 3d transformation](/img/da/91f5050deb5c72a1527b5a88160e6c.png)
[Case] A rotating circle in 3d transformation
Registered less than a week for data security in the British parliament TikTok dispute the substance is discontinued

一种基于目标检测实现黑花屏分类任务的方案

Instant messaging development long connection gateway technology: WebSocket real-time push gateway technology

leetcode:285. 二叉搜索树中的中序后继节点

华为设备配置MSTP+VRRP组合组网
随机推荐
【七夕限定盲盒抽奖】一文带你搞懂盲盒抽奖的页面配置
![CDATA[]]和转义字符讲解
mapping transferdata FindTransferAnchors TransferData
高数_证明_极限存在的夹逼准则
2018-10-14 21点20分
阿里云赵明山:详解灵活可插拔的渐进式发布框架OpenKruise Rollout
裁员欠薪,黄光裕没能让国美真快乐
MySQL 概念
支付系统架构设计详解
学习笔记220—office2016无法登录账号,提示“很抱歉遇到一些临时服务器问题”?
Laplace(拉普拉斯)算子
基于consul的服务注册与消费案例
laravel 子查询
透过浏览器看HTTP缓存
HDBaseT是什么协议?与SDI和HDMI比较有哪些区别?
数据思维总结:
2022年五大网络管理发展趋势
【工具】简道云零代码开发平台
基于eureka-server的服务注册与消费案例
华为设备配置MSTP+VRRP组合组网





