您的位置:首页 > 其它

第七章:存储过程

2016-03-14 16:08 176 查看

一.存储过程的概念

存储过程是在数据库管理系统中保存的,预先编译的,能实现某种功能的SQL程序,它是数据库应用中比较广泛的一种数据对象

1.为什么需要存储过程

1)数据库不安全

2)运行慢

3)网络流量大

2.什么是存储过程

是SQL语句和控制语句的预编译集合,保存在数据库里,可由应用程序调用执行,而且允许用户声明变量,逻辑控制语句及其他强大的编程功能。它可以接收参数,输出参数,返回单个或多个结果集及返回值。

使用存储过程的优点:

①模块化程序设计。

②执行速度快,效率高。

③减少网络流量

④具有良好的安全性

二.系统存储过程

1.常用的系统存储过程

系统存储过程说明
sp_databases列出服务器上的所有数据库信息,包括数据库名称和数据库大小
sp_helpdb报告有关指定数据库或所有数据库的信息
sp_renamedb更改数据库的名称
sp_tables返回当前环境下可查询的表或视图的信息
sp_columns返回某个表或视图的列信息,包括列的数据类型和长度等
sp_help查看某个数据库对象的信息
sp_helpconstraint查看某个表的约束
sp_helpindex查看某个表的索引
sp_stored_procedures显示存储过程的列表
sp_password添加或修改登录账户的密码
sp_helptext显示默认值,未加密的存储过程,用户自定义的存储过程。触发器或视图的实际文本
语法

exec[ute] 存储过程名 [参数值]


2.常用的扩展存储过程

语法:

exec xp_cmdshell dos 命令[no_output]


其中,exec表示调用存储过程,no_output为可选参数,设置执行dos命令后是否输出返回信息。

三.用户自定义的存储过程

1.创建不带参数的存储过程:

1)创建存储过程

语法:

create proc[edure] 存储过程名
[
{@参数1  数据类型} [= 默认值] [output],
……
{@参数n  数据类型} [= 默认值] [output],
]
as
SQL语句


2)删除存储过程

语法:

drop proc[edure] 存储过程名


例子:

--最简单的创建存储过程
create procedure usp_Student
as
select * from Student


2.创建带参数的存储过程:

1)创建带参数的存储过程

如果存储过程的参数后面有“output”关键字,则表示此参数为输出参数;否则视为输入参数,输入参数还可以设置为默认值。

2)执行带参数的存储过程

语法:

exec[ute] [返回变量值=]存储过程名 [@参数1=] 参数值1 [output]|[default],
……
[@参数1=] 参数值n [output]|[default]


其中,output表明参数是输出参数,default表示参数的默认值

例子:

create procedure usp_unpass
@subName varchar(50),
@score int
as
declare @subjectNo int --课程编号
declare @date datetime  --最近考试时间
select @subjectNo=subjectNo from Subject where SubjectName=@subName
select @date=max(ExamDate) from Result
inner join  Subject on Result.SubjectNo=Subject.SubjectNo
where Result.SubjectNo=@subjectNo
print '--------------------------------------------------------'
print '参加最近一次'+@subName+'考试没有达到分数线的学员:'
select StudentName.Student,StudentNo,StudentResult from Student
inner join Result on Student.StudentNo=Result.StudentNo
where StudentResult<@score
and ExamDate=@date
and subjectNo=@subjectNo


四.处理错误信息

1.raiserror语句

raiserror返回用户定义的错误信息,可指定严重级别,设置系统变量记录所发生的错误

语法:

raiserror ({msg_id|msg_str}{,severity,state}[with option[,.......n]])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: