(
课件网) 数据库技术与应用 数据库技术与应用教材编写组 第六章 存储过程与触发器 存储过程的基本概念 存储过程的特点与作用 触发器的基本概念 触发器的特点与作用 存储过程创建、执行以及参数应用的方法 触发器的创建及使用方法 存储过程的参数应用方法 * 问题提出 为什么需要存储过程?存储过程是什么? 为什么要触发器?触发器是什么? * 6.1 存储过程概述 存储过程的特点和类型 存储过程的创建和执行 存储过程参数和执行状态 存储过程的查看和修改 存储过程的删除 * 6.1.1 存储过程的特点和类型 存储过程 是存储在服务器上的Transact-SQL语句的命名集合。 是封装重复任务的方法 存储过程的特点 封装复杂操作 加快系统运行速度 实现代码重用 增强安全性 减少网络流量 调用方便 * 查询通知的工作流 数据库监视 6.1.1 存储过程的特点和类型 存储过程的类型 SQL Server 2008中常用的存储过程类型有3种: 系统存储过程(sp_): 由数据库系统自身创建,存储在master数据库中,以“sp_” 前缀标识 用户定义存储过程(本地存储过程): 在单独的用户数据库内由用户创建。 临时存储过程:可以是局部的,名称以“#”开头;也可以是全局的,名称以“##”开头。 扩展存储过程(xp_): 以动态链接库(DLL)的形式实现。以“xp_”为前缀,只能添加到master数据库中,在SQL Server 环境外执行。 * 6.1.2 存储过程的创建和执行 创建存储过程实际是对存储过程进行定义的过程,主要包含: 存储过程名称及其参数的说明和存储过程的主体 (包含执行过程操作的 T-SQL 语句)两部分。 可以使用3种方法创建存储过程: 使用图形工具 使用向导 使用Transact-SQL语言中的CREATE PROCEDURE语句 * 6.1.2 存储过程的创建和执行 使用图形工具创建存储过程 * 6.1.2 存储过程的创建和执行 使用CREATE PROCEDURE语句创建存储过程 语法格式如下: CREATE PROC[EDURE] [schema_name.] procedure_name [; number] [{ @parameter [schema_name.]data_type} [ VARYING default ] [ OUTPUT ]] [WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION }] [ FOR REPLICATION ] AS sql_statement [...n] * 注意事项: 只能在本地数据库中创建存储过程 ;可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可 可以在存储过程内引用临时表,如果在存储过程内创建本地临时表,则临时表仅为该存储过程而存在;退出该存储过程后,临时表将消失 根据可用内存的不同,存储过程最大可达128MB 注意: schema_name表示架构名,如 dbo.student, 其中dbo是一个架构名,表示系统管理员。 ENCRYPTION表示加密; REPLICATION表示复制 6.1.2 存储过程的创建和执行 【例6.1】在Student数据库中创建一个名为p_Stu的存储过程,它将从表中返回所有学生的姓名、性别、班级、电话 存储过程只能建立在当前数据库上,故需先用USE语句来指定数据库 USE Student Go 存储过程的内容如下: CREATE PROCEDURE p_Stu AS SELECT St_ID, St_Sex, Cl_Name,Telephone FROM St_Info 以存储过程是从单个表中提取数据,最终返回了学生的简明信息。 * 6.1.2 存储过程的创建和执行 【例6.2】创建一个带SELECT查询语句的名为“Average_Score”的存储过程。从学生表、课程表、选课表返回每位修课学生的课程平均分。 分析: 学生表与选课表通过“St_ID”关联, 课程表与选课表通过“C_No”关联, 要查到每个学生的修课平均分,需要通过聚集函数AVG计算, 因为引用了聚集函数,SELECT查询中必须使用GROUP BY分组。 * CREATE PROC Average_Score AS SELECT St_Name, AVG(Score) AS AvgScore FROM St_Info, S_C_Info, C_Info WHERE St_Info ... ...