第6章存储过程与触发器.pptx
第6章存储过程与触发器
SQLServer2019
数据库技术与应用
存储过程概述
触发器概述
存储过程概述
6.1
6.1.1存储过程的特点和类型
存储过程
是SQLServer服务器中一组预编译的T-SQL语句的集合。
是封装重复任务的方法
存储过程的特点
封装复杂操作
加快系统运行速度
实现代码重用
增强安全性
减少网络流量
调用方便
存储过程概述
6.1
6.1.1存储过程的特点和类型
存储过程的类型
SQLServer2008中常用的存储过程类型有3种:
系统存储过程(sp_):
由数据库系统自身创建,存储在master数据库中,以“sp_”前缀标识
用户定义存储过程(本地存储过程):
在单独的用户数据库内由用户创建。
临时存储过程:可以是局部的,名称以“#”开头;也可以是全局的,名称以“##”开头。
扩展存储过程(xp_):
以动态链接库(DLL)的形式实现。以“xp_”为前缀,只能添加到master数据库中,在SQLServer环境外执行。
存储过程概述
6.1
6.1.2存储过程的创建与执行
创建存储过程实际是对存储过程进行定义的过程,主要包含:
存储过程名称及其参数的说明和存储过程的主体
(包含执行过程操作的T-SQL语句)两部分。
可以使用3种方法创建存储过程:
使用图形工具
使用向导
使用Transact-SQL语言中的CREATEPROCEDURE语句
存储过程概述
6.1
---6.1.2存储过程的创建与执行
使用图形工具创建存储过程
存储过程概述
6.1
---6.1.2存储过程的创建与执行
使用CREATEPROCEDURE语句创建存储过程
语法格式如下:
CREATEPROC[EDURE]
[schema_name.]procedure_name[;number]
[{@parameter[schema_name.]data_type}
[VARYINGdefault][OUT|OUTPUT]]
[,…n]
[WITH{RECOMPILE|ENCRYPTION}]
[FORREPLICATION]
AS{[BEGIN]sql_statement[;][...n][END]}
注意:
schema_name表示架构名,如dbo.student,其中dbo是一个架构名,表示系统管理员。
ENCRYPTION表示加密;
REPLICATION表示复制
存储过程概述
6.1
---6.1.2存储过程的创建与执行
【例6.1】在Student数据库中创建一个名为p_Stu的存储过程,它将从表中返回所有学生的:StName、StSex、Class、Telephone
存储过程只能建立在当前数据库上,故需先用USE语句来指定数据库
USEStudent
Go
存储过程的内容如下:
CREATEPROCEDUREp_Stu
AS
SELECTStName,StSex,Class,TelephoneFROMStInfo
此存储过程是从单个表中提取数据,最终返回了学生的简明信息。
存储过程概述
6.1
---6.1.2存储过程的创建与执行
【例6.2】创建一个带SELECT查询语句的名为Average_Score的存储过程。从学生表、课程表、选课表中返回每位修课学生的课程平均分,要求包含姓名与平均分信息。
分析:
学生表与选课表通过“StID”关联,
课程表与选课表通过“CNo”关联,
要查到每个学生的修课平均分,需要通过聚集函数AVG计算,
因为引用了聚集函数,SELECT查询中必须使用GROUPBY分组。
存储过程的内容如下:
CREATEPROCEDUREAverage_ScoreAS
SELECTStInfo.StName,AVG(SCInfo.Score)ASAvgScoreFROMStInfo, SCInfo,CInfo
WHEREStInfo.StID=SCInfo.StIDANDSCInfo.CNo=CInfo.CNo
GROUPBYStInfo.StName
存储过程概述
6.1
---6.1.2存储过程的创建与执行
使用EXECUTE(或EXEC)命令执行存储过程
语法格式如下:
[[EXEC[UTE]]
{[@