第一篇:教学:数据库-存储过程资料
教学三:存储过程
一、教学目的
(1)掌握T-SQL流控制语句;(2)掌握创建存储过程的方法;(3)掌握存储过程的执行方法;(4)掌握存储过程的管理和维护。
二、教学内容
1、创建简单存储过程
(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。
if exists(select name from sysobjects where name='stu_pr'and type='p')begin print '已删除!' drop procedure stu_pr end else print '不存在,可创建!' go create procedure stu_pr as select * from Student_20103322 left outer join SC_20103322
on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where classno='051' 1
exec stu_pr
2、创建带参数的存储过程
(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。
if exists(select name from sysobjects where name='stu_proc1' and type='p')begin
print '已删除!' drop procedure stu_proc1 end else
print '不存在,可创建!' go create procedure stu_proc1 @Sdept char(8)='%',@Sname varchar(8)='林%' as select Sdept,Student_20103322.Sno,Sname,DATEDIFF(YEAR,Birth,GETDATE())age,Cname,Grade from Student_20103322,SC_20103322,Course_20103322 where Student_20103322.Sno=SC_20103322.Sno and Course_20103322.Cno=SC_20103322.Cno and Sdept like @Sdept and Sname like @Sname
execute stu_proc1 '计算机系','林红' 3
execute stu_proc1 '信息安全','胡光璟'
(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。(学号起始号与终止号在调用时输入,可设默认值)。执行该存储过程。if exists(select name from sysobjects where name='Student_sc'and type='p')begin print '已删除!' drop procedure student_sc end else print '不存在,可创建!' go create procedure Student_sc @Sno1 char(8),@Sno2 char(8)as select Student_20103322.Sno,Sname,SUM(Grade)总成绩 from Student_20103322,SC_20103322,Course_20103322 where Student_20103322.Sno=SC_20103322.Sno and Course_20103322.Cno=SC_20103322.Cno and Student_20103322.Sno>=@Sno1 and Student_20103322.Sno<=@Sno2 group by Student_20103322.Sno,Sname
execute Student_sc '20110000','20110003' 5
3、创建带输出参数的存储过程
(1)创建一个名为Course_sum的存储过程,可查询某门课程考试的总成绩。总成绩可以输出,以便进一步调用。
if exists(select name from sysobjects where name='Course_sum'and type='p')begin print '已删除!' drop procedure Course_sum end else print '不存在,可创建!' go create procedure Course_sum @Cname varchar(20),@sum int output as select @sum=sum(Grade)from SC_20103322,Course_20103322 where Course_20103322.Cno=SC_20103322.Cno and Cname=@Cname
group by SC_20103322.Cno,Cname
declare @ping int exec Course_sum '高数',@ping output print '高数的考试总成绩为:'+cast(@ping as varchar(20))
(2)创建一执行该存储过程的批处理,要求当总成绩小于100时,显示信息为:“XX课程的总成绩为:XX,其总分未达100分”。超过100时,显示信息为:“XX课程的总成绩为:XX”。
declare @sum int
declare @Cname varchar(20)Exec Course_sum @cname,@sum out begin
if @sum <100 print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)+ ',其总分未达分'
else
print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)end
declare @sum int
declare @Cname varchar(20)set @Cname='高数' Exec Course_sum @cname,@sum out begin
if @sum <100 print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)+ ',其总分未达分'
else
print cast(@cname as varchar)+'课程的总成绩为:'+cast(@sum as varchar)end
4、创建带重编译及加密选项的存储过程
创建一个名为update_sc、并带重编译及加密选项的存储过程,可更新指定学号、指定课程号的学生的课程成绩。(学号、课程号由调用时输入)
if exists(select name from sysobjects where name='update_sc'and type='p')begin print '已删除!' drop procedure update_sc end else print '不存在,可创建!' go create procedure update_sc
@sno char(8),@cno char(3),@grade tinyint with RECOMPILE , ENCRYPTION as update SC_20103322 set Grade=@grade
where Sno=@sno and Cno=@cno
declare @sno char(8),@cno char(3),@grade tinyint set @sno='20103322' set @cno='003' set @grade='100' exec update_sc @sno,@cno,@grade begin print cast(@sno as varchar)+'的'+cast(@cno as varchar)+'课程成绩为:'+cast(@grade as varchar)end
5、使用T-SQL语句管理和维护存储过程
(1)使用sp_helptext查看存储过程Student_sc的定义脚本
exec sp_helptext student_sc
(2)使用select语句查看Student_sc存储过程的定义脚本(提示:通过查询表sysobjects和表syscomments)
select *
from sysobjects,syscomments where name = 'Student_sc'
(3)将存储过程stu_pr改为查询学号为2011001的学生的详细资料。
alter procedure stu_pr as select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001'
(4)删除存储过程stu_pr。
drop procedure stu_pr
6、使用SQL Server Management Studio管理存储过程
(1)在SQL Server Management Studio中重新创建刚删除的存储过程stu_pr create procedure stu_pr as begin select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001' end
(2)查看存储过程stu_pr,并将该过程修改为查询051班女生的所有资料。
ALTER procedure [dbo].[stu_pr] as begin select * from Student_20103322 left outer join SC_20103322 on(Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on(Course_20103322.Cno=SC_20103322.Cno)where Student_20103322.Sno='2011001' and Sex='女' end
(3)删除存储过程stu_pr
【完】
第二篇:网络数据库讲稿(存储过程)
网络数据库讲稿
4/15/2013
存储过程
P177
一、什么是存储过程
1.是一个过程,与其它语言中的过程几乎完全相同。它们可以接收参数、输出参数、返回单个或多个结果集以及返回值。2.存储在服务器上的数据库中,创建时进行编译。3.在后台运行,其主要功能是对数据库操作。4.可以在一个存储过程内调用其它存储过程。
二、.存储过程的分类
分为三类:用户自定义存储过程(普通存储过程),扩展存储过程,系统存储过程。
三、创建普通存储过程
CREATE PROCEDURE命令 例: 1.CREATE PROCEDURE 检索 @XH CHAR(6)AS SELECT * FROM 成绩 WHERE 学号=@XH 2.在成绩表中添加一条记录,如果成绩及格,还要在学生表中增加学分。
CREATE PROCEDURE 输入考试分数
@XH CHAR(6),@KCH CHAR(8),@FS DECIMAL(4,1)AS IF EXISTS(SELECT * FROM 学生 WHERE 学号=@XH)BEGIN
INSERT 成绩 VALUES(@XH,@KCH,@FS)
IF @FS>=60
UPDATE 学生 SET 已修学分
=已修学分+(SELECT 学分 FROM 课程 WHERE 课程编号=@KCH)
WHERE 学号=@XH END ELSE PRINT '无此学号'+@XH
3.在成绩表中删除指定学号和课程的记录,如果所删的分数及格,还要在学生表中减去对应的学分。CREATE PROCEDURE 删除考试分数
@XH CHAR(6),@KCH CHAR(8)AS DECLARE @FS DECIMAL(4,1)SET @FS=(SELECT MAX(分数)FROM 成绩
网络数据库讲稿
4/15/2013 WHERE 学号=@XH AND 课程编号=@KCH)IF @FS>0 DELETE FROM 成绩 WHERE 学号=@XH AND 课程编号=@KCH IF @FS>=60 UPDATE 学生 SET 已修学分
=已修学分-(SELECT 学分 FROM 课程 WHERE 课程编号=@KCH)
WHERE 学号=@XH
四、执行存储过程
P183 例: EXECUTE 检索 '200202' 检索 '200202' INSERT 成绩0 EXECUTE 检索 '200202' EXECUTE 输入考试分数 '200209','W2020610',56 EXECUTE 输入考试分数 '200209','W2020610',88 EXECUTE 输入考试分数 '200209','L2030506',90 如果执行存储过程是批处理中的第一条语句,则可以省略EXEC。
五、参数
P185 1.输入参数 按位置传递 用参数名传递 使用默认值
2.输出参数
P187 虚参和实参后边都要加上OUTPUT。例P187: CREATE PROC 班级人数@N INT OUTPUT,@CID CHAR(6)='200201' AS SELECT @N=COUNT(*)FROM 学生WHERE 班级=@CID
DECLARE @M INT EXEC 班级人数@M OUTPUT,'200208' SELECT @M
DECLARE @M INT EXEC 班级人数@M OUTPUT SELECT @M
六、查看存储过程信息
select * from sys.sql_modules SELECT OBJECT_DEFINITION(OBJECT_ID('检索'))
网络数据库讲稿
4/15/2013 sp_helptext 检索
七、修改存储过程
八、删除存储过程
1.在对象资源管理器或查询窗口中删除 2.用命令DROP PROCEDURE删除。
第三篇:sql 数据库 实验九:T-SQL语言、存储过程及数据库的安全性
实验九:T-SQL语言、存储过程及数据库的安全性
一、实验目的1.掌握数据变量的使用;
2.掌握各种控制语句及系统函数的使用;
3.掌握存储过程的实现;
4.掌握混合模式下数据库用户帐号的建立与取消方法;
5.掌握数据库用户权限的设置方法;
6.掌握在企业管理器中进行备份、恢复操作的步骤;
二、实验学时
2学时
三、实验要求
1.了解T-SQL支持的各种基本数据类型及变量的使用;
2.了解T-SQL各种运算符、控制语句及函数的功能及使用方法;
3.掌握存储过程的编写和运行方法
4.熟悉数据库完全备份及恢复的方法;
5.了解SQL Server 2008系统安全;
6.熟悉数据库用户、服务器角色及数据库角色的用法
7.完成实验报告。
四、实验内容
以student数据库为基础数据,完成以下内容
1.变量及函数的使用:
1)创建局部变量@xh(学号)并赋值,然后输出数据表student中所有等于该值的学生的学号、姓名、性别、所属院系及年龄等信息;
2)将学号为200515008的学生的姓名赋值给变量@name;
3)计算学生信息表student中学生最高年龄和最低年龄之差,并将结果付给@cz;
4)定义一函数,按系别统计当前所有学生的平均年龄,并调用该函数。
5)定义一函数,通过姓名查询某学生的学号、性别、年龄、系别、选修课程名及成绩。
2.编写并执行存储过程
(1)创建一个无参存储过程pr_StuScore,查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。
(2)创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的选修课程及成绩信息。
(3)创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生
编号和课程名称查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。
(4)编写带参数的存储过程,根据传入的课程名称统计该课程的平均成绩。
3.*对数据库student进行完全备份和恢复操作;
4.*以系统管理员身份登录到SQL Server服务器,在SQL Server2008界面中实现以下操作
1)在当前计算机中增加一个用户zhang,密码为secret。使此用户通过windows
模式下登录SQL Server服务器,登录名为zhang;
2)新建以混合模式登录SQL Server服务器的用户登录名分别为stu1、stu2和
stu3,登录密码为secret,默认登录数据库为student;
3)在数据库student中创建用户zhang,登录帐号为zhang;
4)在数据库student中创建用户stu1、stu2和stu3,登录帐号为stu1、stu2
和stu3;
5)给数据库用户zhang赋予创建数据表的权限;
6)给数据库用户stu1赋予对sc表进行插入、修改、删除操作权限;
7)给数据库用户stu2和stu3赋予对student表、course表所有操作权限及查
询sc的操作权限,并允许再授权给其他用户;
8)撤销数据库用户stu2对student表和course表的删除操作的权限;
五、实验步骤
3.对数据库student进行完全备份和恢复操作;
1)对数据库student进行完全备份操作;
以管理员账号登录SQL Server并运行SQL Server资源管理器;以下方法任选其一
方法1:利用资源管理器进行备份
(1)打开【对象资源管理器】,在【服务器对象】节点下找到【备份设备】节点,单击鼠标右键,弹出右键菜单,选择【新建备份设备】菜单,弹出新建备份设备窗口。输入备份设备逻辑名称data_backup,并指定备份设备的物理路径,例如“D:backupdata_full.bak”,单击【确定】。
(2)连接到相应的SQL Server服务器实例之后,在【对象资源管理器】中,单击服务器名称以展开服务器树。找到【数据库】节点展开,选择STUDENT
数据库,单击鼠标右键,在弹出的快捷菜单中选择【任务】—>【备份】命令。
(3)在【备份数据库】对话框中的【数据库】下拉列表中选择的数据库名STUDENT。在【备份类型】下拉列表中选择备份类型为“完整”,在【名称】文本框中输入备份集的名称STUDENT_BAK,在【备份集过期时间】选项中指定备份集过期时间为30天,在“选择页”窗格中,单击【选项】,在【可靠性】选项中选择“完成后验证备份”选项,最后单击【确定】按钮。
方法2:用T-SQL语句进行数据库完全备份
使用逻辑名STUDENTBAK创建一个命名的备份设备,并将数据库STUDENT完全备份到该设备。在查询分析器的窗口输入如下的语句并执行:
USE master
EXEC sp_addumpdevice ‘disk’,’ STUDENTBAK’,’D:backup STUDENTBAK.BAK’
BackUp DataBase STUDENT To STUDENTBAK
2)在资源管理器中进行数据库恢复;
(1)展开【数据库】节点,用鼠标右键单击STUDENT,在弹出的快捷菜单中选择【属性】命令。打开“数据库属性”对话框,在“选择页”列表中,单击“选项”。在“恢复模式”下拉列表中选择【完整】恢复模式。
(2)用鼠标右键单击STUDENT,在弹出的快捷菜单中选择【任务】—>【还原】—>【数据库】命令。打开“还原数据库”对话框。在“常规”选项卡上,“目标数据库”下拉列表框中选择STUDENT。在“目标时间点”文本框中,使用默认值“最近状态”。在“选择用于还原的备份集”表格中,选择用于还原的备份,单击“确定”按钮。
4.*以系统管理员身份登录到SQL Server服务器,在SQL Server2008界面中实现以下操作
1)在当前计算机中增加一个用户zhang,密码为secret。使此用户通过windows
模式下登录SQL Server服务器,登录名为zhang; 在计算机中增加用户的方法如下:单击【开始|管理工具】,选择【计算机管理】,在【计算机管理】的窗口中单击左边的【本地用户和组】,在右侧【用户】文件夹上单击右键,选择菜单上的【新用户】,然后在弹出的【新用户】对话框中键入您准备使用的用户名、密码,然后清除【用户下次登录时须更改密码】复选框的选中状态,再单击【创建】按钮,然后单击【关闭】按钮关闭对话框。
创建windows身份验证登陆用户方法:在【对象资源管理器】中,展开【安全性】节点,然后右键单击【登录名】,在弹出的快捷菜单中选择【新建登录名】。在“登录名-新建”对话框中单击【登录名】后面的搜索按钮,选择
【高级】,在弹出的对话框中选择【立即查找】,在搜索结果中选择已经建立的用户名,单击【确定】按钮,回到“登录名-新建”对话框中,最后单击确定按钮完成创建。
2)新建以混合模式登录SQL Server服务器的用户登录名分别为stu1、stu2和
stu3,登录密码为secret,默认登录数据库为student;
创建SQL Server身份验证登陆用户方法:在【对象资源管理器】中,展开
【安全性】节点,然后右键单击【登录名】,在弹出的快捷菜单中选择【新建登录名】。在“登录名-新建”对话框中选择SQL Server身份验证选项,在【登录名】后面输入用户名,在密码及确认密码后面输入密码。取消【强制密码过期】选项,单击【确定】按钮。
3)在数据库student中创建用户zhang,登录帐号为zhang;
在【对象资源管理器】中展开student数据库节点,展开【安全性】节点,在用户上单击鼠标右键选择【新建用户】命令,在弹出的新建对话框中单击
【登陆名】后面的搜索按钮,在弹出的【选择登录名】对话框中单击【浏览】按钮,在相应的账号前面选中并单击【确定】按钮,最后在用户名后面输入用户名称,单击【确定】按钮完成创建。
CREATEUSERzhang for login zhang
4)在数据库student中创建用户stu1、stu2和stu3,登录帐号为stu1、stu2
和stu3;
CREATEUSERstu1 for login stu1
5)给数据库用户zhang赋予创建数据表的权限;
在student数据库安全性节点下的用户名上单击鼠标右键,选择【属性】,在打开的对话框中选择【安全对象】页,单击右边的【搜索】按钮,在弹出的【添加对象】对话框中直接单击【确定】按钮,然后单击【对象类型】按钮,弹出【选择对象类型】对话框,选中【数据库】,单击【确定】按钮。再在选择对象对话框中单击【浏览】,在student数据库前面选中,单击【确定】。最后在【安全对象】页下方的student的权限中创建表选项后的【授予】复选框中选中,单击【确定】完成设置。
GRANTcreatetabletozhang
6)给数据库用户stu1赋予对sc表进行插入、修改、删除操作权限;
GRANT insert,update,delete ONsc to stu
17)给数据库用户stu2和stu3赋予对student表、course表所有操作权限及查
询sc的操作权限,并允许再授权给其他用户;
GRANTALL PRIVILEGESONStudent,CourseTOstu2,stu3
WITH GRANT OPTION
8)撤销数据库用户stu2对student表和course表的删除操作的权限;
RevokedeleteON Student,CourseFROM stu2 CASCADE
第四篇:mysql 5.0存储过程学习总结
mysql 5.0存储过程学习总结
一.创建存储过程 1.基本语法:
create procedure sp_name()begin end 2.参数传递
二.调用存储过程
1.基本语法:call sp_name()注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程 1.基本语法:
drop procedure sp_name// 2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
四.区块,条件,循环 1.区块定义,常用 begin end;也可以给区块起别名,如: lable:begin end lable;可以用leave lable;跳出区块,执行区块以后的代码
2.条件语句 3.循环语句 :while循环 loop循环 repeat until循环 repeat until循环
五.其他常用命令
1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等 2.show create procedure sp_name 显示某一个存储过程的详细信息
mysql存储过程基本函数
一.字符串类
CHARSET(str)//返回字串字符集 CONCAT(string2 [,...])//连接字串
INSTR(string ,substring)//返回substring首次在string中出现的位置,不存在返回0 LCASE(string2)//转换成小写
LEFT(string2 ,length)//从string2中的左边起取length个字符 LENGTH(string)//string长度
一起推论坛
一起推论坛www.xiexiebang.com
第五篇:课题:SQLServer存储过程返回值总结
SQLServer存储过程返回值总结
1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)
用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况
(1)假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行count就是几
(2)假如通过查询分析器执行该存储过程,在显示栏中假如显示'命令已成功完成。'则count =-1;在显示栏中假如有查询结果,则count =-1
总结:A.ExecuteNonQuery()该方法只返回影响的行数,假如没有影响行数,则该方法的返回值只能是-1,不会为0。
B.不论ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text执行,其效果和A一样。
2.获得存储过程的返回值--通过查询分析器获得
(1)不带任何参数的存储过程(存储过程语句中含有return)
---创建存储过程
CREATE PROCEDURE testReturn
AS
return 145
GO
---执行存储过程
DECLARE @RC int
exec @RC=testReturn
select @RC
---说明
查询结果为145
(2)带输入参数的存储过程(存储过程语句中含有return)
---创建存储过程
create procedure sp_add_table1
@in_name varchar(100), @in_addr varchar(100), @in_tel varchar(100)
as
if(@in_name = '' or @in_name is null)
return 1
else
begin
insert into table1(name,addr,tel)values(@in_name,@in_addr,@in_tel)
return 0
end
---执行存储过程
<1>执行下列,返回1
declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count
<2>执行下列,返回0
declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count
---说明
查询结果不是0就是1
(3)带输出参数的存储过程(存储过程中可以有return可以没有return)
例子A:
---创建存储过程
create procedure sp_output
@output int output
as
set @output = 121
return 1
---执行存储过程
<1>执行下列,返回121
declare @out int
exec sp_output @out output
select @out
<2>执行下列,返回1
declare @out int
declare @count int exec @count = sp_output @out output
select @count
---说明
有return,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为return返回的值
例子B:
---创建存储过程
create procedure sp_output
@output int output
as
set @output = 121
---执行存储过程
<1>执行下列,返回121
declare @out int
exec sp_output @out output
select @out
<2>执行下列,返回0
declare @out int
declare @count int
exec @count = sp_output @out output
select @count
---说明
没有return,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为0
总结:
(1)存储过程共分为3类:
A.返回记录集的存储过程---------------------------其执行结果是一个记录集,例如:从数据库中检索出符合某一个或几个条件的记录
B.返回数值的存储过程(也可以称为标量存储过程)-----其执行完以后返回一个值,例如:在数据库中执行一个有返回值的函数或命令
C.行为存储过程----用来实现数据库的某个功能,而没有返回值,例如:在数据库中的更新和删除操作
(2)含有return的存储过程其返回值为return返回的那个值
(3)没有return的存储过程,不论执行结果有无记录集,其返回值是0
(4)带输出参数的存储过程:假如有return则返回return返回的那个值,假如要select输出参数,则出现输出参数的值,于有无return无关
--------------------3.获得存储过程的返回值--通过程序获得
---------------------------SqlParameter[] cmdParms = {..,new SqlParameter(“@return”,SqlDbType.Int)};cmdParms[cmdParms.Length1].Direction = ParameterDirection.Output或者 cmdParms[cmdParms.Length1].Value;
分类: asp.net