目录

  • 第1单元    数据库系统导论
    • ● 任务1.1  数据库基本概念
    • ● 任务1.2  设计E—R 图
    • ● 任务1.3   将E-R图转换成关系模型
    • ● 任务1.4   练习与作业
    • ● 教与学参考资源
  • 第2单元   认识SQL SERVER数据库
    • ● 任务2.1 数据库应用场景
    • ● 任务2.3  SQL  Server 数据库安装
    • ● 任务2.4 SQL Server 的管理
    • ● 任务2.5  使用SSMS连接数据库
    • ● 教与学参考资源
  • 第3单元  创建和管理数据库
    • ● 任务3.1 创建数据库
    • ● 任务3.1(2)  命令创建数据库
    • ● 任务3.2 管理数据库
    • ● 任务3.2(2) 查看、收缩数据库
    • ● 教与学参考资源
  • 第4单元 创建和管理数据库表
    • ● 任务4.1 SQL Server常用数据类型
    • ● 任务4.2  创建数据表
    • ● 任务4.3  命令创建表
    • ● 任务4.4 实施完整性约束
    • ● 教与学参考资源
  • 第 5 单元   查询数据表
    • ● 任务5.1 单表数据查询
    • ● 任务5.2 多表数据查询
    • ● 任务5.3 嵌套查询
    • ● 任务5.4 合并查询结果
    • ● 教与学参考资源
  • 第6单元  管理表中数据
    • ● 任务6.1   添加数据
    • ● 任务6.2  修改数据
    • ● 任务6.3  删除数据
    • ● 习题与训练
    • ● 教与学参考资源
  • 第7单元  使用索引和视图
    • ● 任务7.1  使用索引
    • ● 使用T-SQL创建索引
    • ● 任务7.2  使用视图
    • ● 使用T-SQL语句创建视图
    • ● 教与学参考资源
  • 第8单元 Transact-SQL语言编程
    • ● 任务8.1   声明和使用变量
    • ● 任务8.2   流控语句
    • ● 任务8.3   常用系统函数
    • ● 任务8.4   创建自定义函数
    • ● 教与学参考资源
  • 第9单元  事务和锁
    • ● 任务   9.1     事务
    • ● 事务的基本操作
    • ● 任务9.2    锁
    • ● 死锁及避免方法(例)
    • ● 教与学参考资源
  • 第10单元  创建和管理存储过程
    • ● 任务10.1 存储过程及优点
    • ● 任务10.2 创建和执行存储过程
    • ● 任务10.3   存储过程参数和返回值
    • ● 任务10.4 修改、删除、 重新编译存储过程
    • ● 教与学参考资源
  • 第11单元 创建和管理触发器
    • ● 任务1 触发器的作用和分类
    • ● 任务2 触 发器的创建与执行
    • ● 任务3 创建级联触发器
    • ● 任务4 修改、删除触发器
  • 第12单元 创建和使用游标
    • ● 任务1  游标的作用及使用步骤
    • ● 任务2  创建基本游标
    • ● 任务3  使用变量保存游标数据
    • ● 任务4  使用循环环提取游标数据
  • 第13单元 SQL Server用户管理
    • ● 任务1数据库安全管理概述
    • ● 任务2SQL Server 安全机制
    • ● 任务3 账号、角色及权限管理
    • ● 任务4数据库完整性管理
    • ● 任务5 数据库的备份与还原
    • ● 任务6   数据的导入与导出
  • 第14单元  综合应用案例
    • ● 概述
    • ● 需求分析
    • ● 概述设计-逻辑设计- 物理设计
    • ● 编写数据库设计说明书
  • 学生做项目成果展示
    • ● 项目一  设计《我班同学数据库》
    • ● 项目二  设计《(Teaching)教学数据库》
    • ● 项目三  数据库应用系统设计开发项目
    • ● 项目四 《华夏-宿舍管理系统》设计开发
    • ● 项目五   综合实训大作业
    • ● 综合实训团队项目大作业
    • ● 学生完成项目摘录展示
  • 总复习与综合训练
    • ● 总复习
    • ● 综合训练一
    • ● 综合训练二
    • ● 综合训练三
    • ● 综合训练四
    • ● 综合训练五
    • ● 简答综合训练
  • 在线专题测验
    • ● 自检自测一
    • ● 自检自测二
  • 拓展   数据库管理工具平台  Navicat
    • ● 关于Navica
    • ● Navicat 的系统需求
    • ● Navicat 的用户界面
    • ● Navicat 创建数据库对象
    • ● 在Navicat创建的SQL 程序脚本
    • ● 在Navicat创建的SQL  server 脚本(2)
    • ● 综合实训(1)
    • ● 综合实训(2)
  • 技术拓展   (MYSQL)数据库技术与应用
    • ● MYSQL技术
  • 教与学图片剪影
    • ● 教学团队
    • ● 学生学习实训
    • ● 活动与交流
任务10.4 修改、删除、 重新编译存储过程

任务4 修改存储过程

一 、在SSMS中修改存储过程

存储过程是一段T-SQL代码,在使用过程中,如果它无法满足业务需要,就要对存储过程进行修改,修改存储过程通常指编辑它的参数和SQL语句。修改存储过程可以通过SSMS和T-SQL语句两种方式。

在SSMS中修改存储过程和创建存储过程有些类似。只要在“对象资源管理器”中找到所要修改的存储过程右击,在弹出的快捷菜单中选择“修改(Y)”命令,出现“修改存储过程”的模板界面,在代码区中修改好存储过程的内容,最后单击工具栏中的“执行”按钮,即可完成对存储过程的修改。


二、使用T-SQL语句修改存储过程


除了使用SSMS外,还可以使用ALTER PROCEDURE语句修改存储过程,但该语句不会更改权限,也不影响相关的存储过程。其语法格式如下:

ALTER PROC  [  EDURE  ]  procedure_name  [;number]

[  { @parameter data_type}

[   VARYING]  [=default]  [OUTPUT]]  [,…n]

[   WITH{RECOMPILE | ENCRYPTION | RECOMPILE,  ENCRYPTION}]

[ FOR REPLICATION

AS

sql_statement  [, . . .n]


ALTER PROCEDURE语句中各参数的含义与CREATE PROCEDURE的参数类似。


存储过程在建立后,可对存储过程的定义进行修改或重新命名。


  任务   删除存储过

     当不再使用一个存储过程时,就要把它从数据库中删除。SQL Server 2008提供两种删除存储过程的方法:一种是使用SSMS,另一种是使用T-SQL语句。

一 、 使用SSMS删除存储过程

     SSMS删除存储过程非常简单。在“对象资源管理器”中找到所要修改的存储过程右击,在弹出的快捷菜单中选择“删除(D)”命令,弹出“删除对象”对话框,单击“确定”按钮,即可完成存储过程的删除。

二 、使用T-SQL语句删除存储过程

      T-SQL语言删除存储过程的语句是DROP PROCEDURE,其语法格式如下:

DROP  {PROC | PROCEDURE}  {  [schema_name.  ]  procedure}  [,…n]

语法参数的含义如下。

Schema_name:存储过程所属架构的名称,不能指定服务器名称或数据库名称。

Procedure:要删除的存储过程或存储过程组的名称。

n:表示可以指定多个过程的占位符。


DROP PROC命令删除存储过程


提高:SQL Server  存储过程经验

存储过程是存储在数据库中的T-SQL代码,可以被应用程序多次调用。

存储过程可以接受输入参数。存储过程中的处理结果可以通过输出参数获得。

参数化的存储过程可以提高系统安全性,有助于保护应用程序不受SQL Injection攻击。

在开发基于数据库的应用程序时,建议考虑将各种T-SQL代码放在存储过程中,这样可有效减少网络数据流量。


要点小结:

存储过程的概念及其优点

创建和调用存储过程

修改存储过程

删除存储过程

重新编译存储过程


一、简答题

1、简述存储过程的分类。

2、简述存储过程的优点。

二、上机实践题

1.创建存储过程P_LEND1,能根据给定的读者ID,查询该读者的借阅情况,包括读者ID,借阅图书的书名,借阅日期,归还日期等信息。

2.创建存储过程P_LEND2,能根据给定的读者ID,返回该读者借书的数量。

3.创建存储过程P_LEND3,统计BookInfo(图书信息表)每一类图书的本数。

4.调试、创建示例存储过程


--5. 创建存储过程,根据给定的课程号,打印该课程的成绩清单(DB: [Teaching] )

USE  [Teaching] 

GO


CREATE PROC PrintScore

@COUNO VARCHAR(6)

AS

DECLARE @CNO VARCHAR(5),@COUNAME VARCHAR(20),@SNO VARCHAR(6),@SNAME VARCHAR(8),@SCORE SMALLINT

DECLARE Cr1 CURSOR  FOR

SELECT C.CNO,CNAME,S.SNO,SNAME,SCORE

FROM S,C,SC

WHERE S.SNO=SC.SNO AND C.CNO=SC.CNO AND SC.CNO=@COUNO

OPEN Cr1

PRINT '--------------------成绩清单-----------------'

PRINT  '课程号    课程名     学号     姓名      成绩'

FETCH NEXT FROM Cr1 INTO @CNO,@COUNAME,@SNO,@SNAME,@SCORE

WHILE @@FETCH_STATUS=0

BEGIN

PRINT @CNO++SPACE(5)+CONVERT(CHAR(6),@COUNAME)+SPACE(5)+@SNO+SPACE(3)+CONVERT(CHAR(8),@SNAME)+SPACE(3)+CONVERT(CHAR(3),@SCORE)

FETCH NEXT  FROM Cr1 INTO @CNO,@COUNAME,@SNO,@SNAME,@SCORE

END

CLOSE Cr1

DEALLOCATE Cr1


--应用示例

DECLARE @RC int

DECLARE @COUNO varchar(6)

-- TODO: 在此处设置参数值。

EXECUTE @RC = [Teaching].[dbo].[PrintScore]     'C1'


--应用示例 输出多门课程成绩表

DECLARE @RC int,@C VARchar(6),@K int

DECLARE @COUNO varchar(6)

-- TODO: 在此处设置参数值。

SET  @k=1

WHILE  @K<=8

BEGIN

SET @c='C'+STR(@k,1)

EXECUTE @RC = [Teaching].[dbo].[PrintScore]     @C

SET @K=@K+1

END