何为存储过程?
存储过程是在数据库管理系统中保存的、预先编译的并能实现某种功能的sql程序,说直白点,java知道吧?和java的方法一样。
每遇到一个新的知识点时,我们都会看看它的优点,从而加深对它学习的欲望,存储过程也不例外,那么存储过程有什么优点?
- 执行速度更快
- 允许模块化程序设计
- 提高系统安全性
- 减少网络流通量
看完优点之后,我们再来看看存储过程的分类有哪些,然后我们按照分类一个一个的写(演示)。
- 系统存储过程
- 系统存储过程的名称一般以“sp_”开头
- 由SQLServer创建、管理和使用
- 存放在Resource数据库中
- 类似C#语言类库中的方法
- 扩展存储过程
- 扩展存储过程的名称通常以“xp_”开头
- 使用编辑语言(如C#)创建的外部存储过程
- 以DLL形式单独存在
- 用户自定义存储过程
- 由用户在自己的数据库中创建的存储过程
- 类似C#语言中用户自定义的方法
系统存储过程
(上面已经解释过了,现在直接动手操作)
下面我们演示一下常用的系统存储过程:
1.列出所有的数据库
exec sp_databases
2.修改数据库的名称:
exec sp_renamedb 'jobs','job'
3.当前数据库的所有表(包括视图、表)
exec sp_tables
4.返回student表的列的信息
exec sp_columns student
5.查看表student的信息
exec sp_help student
6.查看表的约束(默认约束,唯一约束)
exec sp_helpconstraint student
7.查看当前数据库中的存储过程
exec sp_stored_procedures
扩展存储过程
(主要就演示一个xp_cmdshell)
xp_cmdshell:
- 可以执行dos命令下的而一些操作
- 以文本方式返回任何输出
下面演示一下该扩展存储过程,查看某个文件夹:(D://DB)
/*若xp_cmdshell座位服务器安全配置的一部分而被关闭,需要先启用*/ exec sp_configure 'show advanced options',1 --显示高级配置信息 go exec sp_configure 'xp_cmdshell',1 --打开xp_shell选项 go reconfigure --重新配置 go --查看某个文件夹:(D://DB) exec xp_cmdshell 'dir D:\DB\'
自定义存储过程
已知有两表,Student学生表和Grade年级表,表中数据如下:(仔细看,这是铺垫)
Student表
Grade表
1.无参的存储过程(查询青鸟一班的所有学生姓名);
创建存储过程:
go create proc job_GetSname as select sname from student where sgid = (select gid from grade where gname = '青鸟一班') go
调用存储过程:
exec job_GetSname
运行结果:
2.带参数的存储过程(根据输入的年级名称查询该年级所有的学生信息)
创建存储过程:
go create proc job_Login @gname varchar(50) as select sname from student where sgid = (select gid from grade where gname = @gname) go
调用存储过程:
exec job_Login '青鸟一班'
运行结果:
3.带输出参数的存储过程(根据学生姓名返回年级名称)
go create proc job_GetGName @sname varchar(50), --输入学生姓名 @gname varchar(50) output --输出年级名称 as select @gname = gname from grade where gid = (select sgid from student where sname = @sname) go
调用存储过程:
declare @gname varchar(50) --声明一个变了接收年级名称 exec job_GetGName '李太白', @gname output print '所在年级是:'+@gname
运行结果: