第 8讲存储过程概述
问题要把某完成功能的 SQL做成类似 C语言的函数,供需要时调用,如何做?
什么是存储过程?
是一组被编译在一起的 T-SQL语句的集合,
它们被集合在一起以完成一个特定的任务。
存储过程的分类
系统存储过程
扩展存储过程(提供从 SQL Server到外部程序的接口,以便进行各种维护活动)
用户自定义的存储过程存储过程的作用
从以下几个方面考虑:
1,模块化编程:
创建一个存储过程存放在数据库中后,就可以被其他程序反复使用。
2,快速执行:
存储过程第一次被执行后,就驻留在内存中。
以后执行就省去了重新分析、优化、编译的过程。
3,减少网络通信量有了存储过程后,在网络上只要一条语句就能执行一个存储过程。
4,安全机制通过隔离和加密的方法提高了数据库的安全性,通过授权可以让用户只能执行存储过程而不能直接访问数据库对象。
存储过程和视图的比较视图 存储过程语句 只能是 SELECT
语句可以包含程序流、
逻辑以及
SELECT语句输入、
返回结果不能接受参数,
只能返回结果集可以有输入输出参数,也可以有返回值典型应用 多个表格的连接查询完成某个特定的较复杂的任务创建
、
执行简单的存储过程
创建格式:
CREATE PROCEDURE proc_name
AS
Sql_statements
【 问题 】 创建一个名为 p_Student的存储过程,返回 student表中班级编码为 20000001的学生信息
执行格式:
EXEC proc_name
练习
1
1,创建一个名为 p_StuByClass
的存储过程,返回,00电子商务,班的所有学生的信息
2,执行该存储过程,并使用企业管理器查看该存储过程的定义创建带输入参数的存储过程
创建格式:
CREATE PROCEDURE proc_name
@para_name datatype [=default],…
AS
Sql_statements
【 例 】 创建一个名为
p_StudentPara的存储过程,该存储过程根据给定的班级编码显示该班级所有学生的信息练习
2
1,创建一个名为 p_StuByPara的存储过程,根据给定的班级编码和学生学号,显示相应学生的信息执行带输入参数的存储过程
执行格式:
EXEC proc_name
[@para_name = ] value,…
指定参数名的格式
不指定参数名的格式
思考:当缺省参数执行存储过程时,如何处理?
带输出参数的存储过程
定义格式同上,同时指明
OUTPUT关键字
创建、执行方法,P202-203
【 练习 】 创建存储过程 P_ClassNum,
要求能根据用户给定的班级代码,
统计该班的人数,并将人数通过输出变量返回给用户。
如要查询班级代码为 ’ 20000002’的学生人数,如何调用存储过程
【 练习 】 创建存储过程 Cou_credit,
要求能根据用户给定的学分值,统计满足该学分值的课程数目,并把它返回给调用程序。
如要统计 2个学分的课程门数,该如何调用上述存储过程。
【 练习 】 创建名为 mod_credit的存储过程,能修改用户指定课程号的课程学分值,修改值也由用户指定。
修改存储过程
修改格式:
ALTER PROCEDURE proc_name
@para_name datatype [=default],…
[WITH ENCRYPTION]
AS
Sql_statements
重命名
、
删除存储过程
重命名:
使用企业管理器
注意:要修改两个地方
删除格式:
DROP PROCEDURE proc_name
重编译处理
(RE
CO
MP
IL
E
)
在创建时指明重编译
在执行时指明重编译
通过系统存储过程设定重编译选项系统存储过程
、
扩展存储过程
sp_addlog—— 创建登录 ID
问题:为何执行该存储过程时可以带一个、两个或者三个参数?
xp_cmdshell—— 执行操作系统命令
xp_enumgroups—— 列出域中的组的信息
xp_loginconfig—— 报告 SQL
Server的登录安全信息本章总结
存储过程的作用
创建、执行简单的存储过程
创建、执行带参数(输入、输出)的存储过程(重点)
重点:存储过程的创建和执行,
特别是带有参数的存储过程
问题要把某完成功能的 SQL做成类似 C语言的函数,供需要时调用,如何做?
什么是存储过程?
是一组被编译在一起的 T-SQL语句的集合,
它们被集合在一起以完成一个特定的任务。
存储过程的分类
系统存储过程
扩展存储过程(提供从 SQL Server到外部程序的接口,以便进行各种维护活动)
用户自定义的存储过程存储过程的作用
从以下几个方面考虑:
1,模块化编程:
创建一个存储过程存放在数据库中后,就可以被其他程序反复使用。
2,快速执行:
存储过程第一次被执行后,就驻留在内存中。
以后执行就省去了重新分析、优化、编译的过程。
3,减少网络通信量有了存储过程后,在网络上只要一条语句就能执行一个存储过程。
4,安全机制通过隔离和加密的方法提高了数据库的安全性,通过授权可以让用户只能执行存储过程而不能直接访问数据库对象。
存储过程和视图的比较视图 存储过程语句 只能是 SELECT
语句可以包含程序流、
逻辑以及
SELECT语句输入、
返回结果不能接受参数,
只能返回结果集可以有输入输出参数,也可以有返回值典型应用 多个表格的连接查询完成某个特定的较复杂的任务创建
、
执行简单的存储过程
创建格式:
CREATE PROCEDURE proc_name
AS
Sql_statements
【 问题 】 创建一个名为 p_Student的存储过程,返回 student表中班级编码为 20000001的学生信息
执行格式:
EXEC proc_name
练习
1
1,创建一个名为 p_StuByClass
的存储过程,返回,00电子商务,班的所有学生的信息
2,执行该存储过程,并使用企业管理器查看该存储过程的定义创建带输入参数的存储过程
创建格式:
CREATE PROCEDURE proc_name
@para_name datatype [=default],…
AS
Sql_statements
【 例 】 创建一个名为
p_StudentPara的存储过程,该存储过程根据给定的班级编码显示该班级所有学生的信息练习
2
1,创建一个名为 p_StuByPara的存储过程,根据给定的班级编码和学生学号,显示相应学生的信息执行带输入参数的存储过程
执行格式:
EXEC proc_name
[@para_name = ] value,…
指定参数名的格式
不指定参数名的格式
思考:当缺省参数执行存储过程时,如何处理?
带输出参数的存储过程
定义格式同上,同时指明
OUTPUT关键字
创建、执行方法,P202-203
【 练习 】 创建存储过程 P_ClassNum,
要求能根据用户给定的班级代码,
统计该班的人数,并将人数通过输出变量返回给用户。
如要查询班级代码为 ’ 20000002’的学生人数,如何调用存储过程
【 练习 】 创建存储过程 Cou_credit,
要求能根据用户给定的学分值,统计满足该学分值的课程数目,并把它返回给调用程序。
如要统计 2个学分的课程门数,该如何调用上述存储过程。
【 练习 】 创建名为 mod_credit的存储过程,能修改用户指定课程号的课程学分值,修改值也由用户指定。
修改存储过程
修改格式:
ALTER PROCEDURE proc_name
@para_name datatype [=default],…
[WITH ENCRYPTION]
AS
Sql_statements
重命名
、
删除存储过程
重命名:
使用企业管理器
注意:要修改两个地方
删除格式:
DROP PROCEDURE proc_name
重编译处理
(RE
CO
MP
IL
E
)
在创建时指明重编译
在执行时指明重编译
通过系统存储过程设定重编译选项系统存储过程
、
扩展存储过程
sp_addlog—— 创建登录 ID
问题:为何执行该存储过程时可以带一个、两个或者三个参数?
xp_cmdshell—— 执行操作系统命令
xp_enumgroups—— 列出域中的组的信息
xp_loginconfig—— 报告 SQL
Server的登录安全信息本章总结
存储过程的作用
创建、执行简单的存储过程
创建、执行带参数(输入、输出)的存储过程(重点)
重点:存储过程的创建和执行,
特别是带有参数的存储过程