1、什么是存储过程?
存储过程是SQL查询语句与控制流语句的预编译集合,并以特定的名称保存在数据库中。存储过程也是数据库对象。
- 存储过程(procedure)类似于C语言中的函数
- 用来执行管理任务或应用复杂的业务规则
- 存储过程可以带参数,也可以返回结果
- 存储过程可以包含数据操纵语句、变量、逻辑 控制语句等。
2、为什么要使用存储过程?
存储过程的优点:
- 执行速度更快
- 允许模块化程序设计
- 提高系统安全性
- 减少网络流通量
3、存储过程的分类
系统存储过程
- 由系统定义,存放在master数据库中
- 类似C语言中的系统函数
- 系统存储过程的名称都以“sp_”开头或”xp_”开头
用户自定义存储过程
- 由用户在自己的数据库中创建的存储过程
- 类似C语言中的用户自定义函数
常用的系统存储过程:
sp_databases |
列出服务器上的所有数据库。 |
sp_helpdb |
报告有关指定数据库或所有数据库的信息 |
sp_renamedb |
更改数据库的名称 |
sp_tables |
返回当前环境下可查询的对象的列表 |
sp_columns |
回某个表列的信息 |
sp_help |
查看某个表的所有信息 |
sp_helpconstraint |
查看某个表的约束 |
sp_helpindex |
查看某个表的索引 |
sp_stored_procedures |
列出当前环境中的所有存储过程。 |
sp_password |
添加或修改登录帐户的密码。 |
sp_helptext |
显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。 |
常用的扩展存储过程:xp_cmdshell
可以执行DOS命令下的一些的操作
以文本行方式返回任何输出
调用语法:
EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
4、如何创建存储过程
定义存储过程的语法:
- 和C语言的函数一样,参数可选
- 参数分为输入参数、输出参数
- 输入参数允许有默认值
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
…… ,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
GO
5、调用存储过程
EXECUTE(执行)语句用来调用存储过程。
调用的语法如下:
EXEC 过程名 [参数]
EXEC proc_getpc
如何删除一个存储过程?
drop 存储过程名 删除存储过程
6、带参数的存储过程
存储过程的参数分两种:
- 输入参数
- 输出参数
输入参数:
用于向存储过程传入值,类似C语言的按值传递;
输出参数:
用于在调用存储过程后
返回结果,类似C语言的
按引用传递;
return关键字可以终止存储过程或者返回数值
7、处理存储过程中的错误
可以使用PRINT语句显示错误信息,但这 些信息是临时的,只能显示给用户。
RAISERROR 显示用户定义的错误信息时
- 可指定严重级别
- 设置系统变量@@ERROR
- 记录所发生的错误等
RAISERROR语句的用法如下:
RAISERROR (msg_id | msg_str,severity,
state WITH option[,...n]])
- msg_id:在sysmessages系统表中指定用户定义错误信息
- msg_str:用户定义的特定信息,最长255个字符
- severity:定义严重性级别。用户可使用的级别为0–18级
- state:表示错误的状态,1至127之间的值
- option:指示是否将错误记录到服务器错误日志中