数据库:SQL存储过程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

执 行 带 输 过入 程参 数 的 存 储

执行格式:
EXEC proc_name [@para_name = ] value, …

指定参数名的格式 不指定参数名的格式

思考:当缺省参数执行存储过 程时,如何处理?
1.

练 习 2

创建一个名为ScBySnoCno的存储 过程,根据给定的学生学号和课 程号,显示相应学生的选课信息 use 学生选课 go create procedure ScBySnoCno @StudentSno char(10), @CourseCno as char(10) as select * from SC where SNO = @StudentSno and Cno =@CourseCno
根据用户给定的系代码,统计该系的人数, 并将人数通过输出变量返回给用户。 如要查询纱代码为’MA’的学生人数,如何 调用存储过程
带 输 出 参 数 的 存 储 过 程

定义:



use 学生选课 go create procedure P_DeptNum @DeptId char(15), @DeptNum smallint OUTPUT as select @DeptNum =COUNT (*) from Student where Sdept =@DeptId DECLARE @NUM SMALLINT EXEC P_DeptNum @DEPTID='MA' , @DEPTNUM=@NUM OUTPUT PRINT @NUM
创 建 、 执 过行 程简 单 的 存 储

创建格式:
CREATE PROCEDURE proc_name AS Sql_statements 【问题】创建一个名为 math_Student的存储过程,返回 student表中数学系的学生信息

执行格式:
EXEC|EXECUTE proc_name
4.
安全机制
通过隔离和加密的方法提高了数据库的安全 性,通过授权可以让用户只能执行存储 过程而不能直接访问数据库对象。
存 储 过 程 和 视 图 的 比 较
视图
语句 只能是SELECT 语句
存储过程
可以包含程序流、 逻辑以及 SELECT语句
输入、 返回结果 典型应用
不能接受参数, 可以有输入输出 只能返回结果集 参数,也可以有 返回值 多个表格的连接 完成某个特定的 查询 较复杂的任务
存储过程
问题 要把某完成功能的SQL做成类似C语言 的函数,供需要时调用,如何做? 什么是存储过程?


概 述
是一组被编译在一起的T-SQL语句的集合, 它们被集合在一起以完成一个特定的任 务。 系统存储过程 扩展存储过程(提供从SQL Server到外部 程序的接口,以便进行各种维护活动) 用户自定义的存储过程

删除格式:
DROP PROCEDURE proc_name

在创建时指明重编译
添加WITH
( RECOMPILE 重 编 译 处 理

RECOMPILE选项
在执行时指明重来自百度文库译
使用
EXECUTE 时指定 WITH RECOMPILE

通过系统存储过程设定重编译 选项
使用系统存储过程

SP_RECOMPILE

调用:



【练习】创建存储过程Cou_credit, 要求能根据用户给定的学分值,统 计满足该学分值的课程数目,并把 它返回给调用程序。 如要统计2个学分的课程门数,该如 何调用上述存储过程。 【练习】创建名为mod_credit的存储 过程,能修改用户指定课程号的课 程学分值,修改值也由用户指定。

存储过程的分类


从以下几个方面考虑:
1.
存 储 过 程 的 作 用
模块化编程:
创建一个存储过程存放在数据库中后,就可 以被其他程序反复使用。
2.
快速执行:
存储过程第一次被执行后,就驻留在内存中。 以后执行就省去了重新分析、优化、编 译的过程。
3.
减少网络通信量
有了存储过程后,在网络上只要一条语句就 能执行一个存储过程。
创 建 带 输 过入 程参 数 的 存 储
【例】创建一个名为StuBySno的存储过程,该存 储过程根据给定的学号显示相应学生的信息 CREATE procedure StuBySno @StudentSno char(10)=NULL as IF @StudentSno IS NULL BEGIN PRINT '必须提供一个数值作参数!' RETURN 13 END IF NOT EXISTS (select * from Student where SNO = @StudentSno) BEGIN PRINT '没有满足条件的记录!' RETURN -103 END select * from Student where SNO = @StudentSno RETURN 0

修改格式:
ALTER PROCEDURE proc_name @para_name datatype [=default], … [WITH ENCRYPTION] AS Sql_statements
修 改 存 储 过 程
重 命 名 、 删 除 存 储 过 程

重命名:
sp_rename 原存储过程名,新存储过 程名
本 章 总 结
存储过程的作用 创建、执行简单的存储过程 创建、执行带参数(输入、输 出)的存储过程(重点) 重点:存储过程的创建和执行, 特别是带有参数的存储过程

创 建 带 输 过入 程参 数 的 存 储

创建格式:
CREATE PROCEDURE proc_name @para_name datatype [=default], … AS Sql_statements
use 学生选课 go create procedure StuBySno @StudentSno char(10) as select * from Student where SNO = @StudentSno
带 输 出 参 数 的 存 储 过 程

定义格式同上,同时指明OUTPUT关 键字



CREATE PROCEDURE proc_name @para_name datatype [=default] [output], … AS Sql_statements

执行方法:用output指明输出参数 【例】创建存储过程P_DeptNum,要求能
创 建 、 执 过行 程简 单 的 存 储

创建格式:
CREATE PROCEDURE proc_name AS Sql_statements
use go create as select
学生选课
procedure math_student

* from Student where Sdept ='ma'
1.
创建一个名为StuBy2009的存 储过程,返回2009级的所有 学生的信息 执行该存储过程,并使用管 理器查看该存储过程的定义
练 习 1
2.
创 建 带 输 过入 程参 数 的 存 储

创建格式:
CREATE PROCEDURE proc_name @para_name datatype [=default], … AS Sql_statements 【例】创建一个名为StuBySno的存 储过程,该存储过程根据给定的 学号显示相应学生的信息
相关文档
最新文档