一:存储过程的定义:
在数据库服务器上(DB Server)存储的预先编译好的一堆SQL语句
是SQL语句和控制语句的预编译集合,保存在数据库里,可由应用程序调用执行,而且允许用户声明变量、逻辑控制语句及其他强大的编译功能。它可以接收参数、输出参数、返回单个或多个结果集及返回值。
为什么需要存储过程???
增加数据库的安全性
二:存储过程的优点:
①:执行速度更快
②:允许模块化程序设计
③:提高系统安全性
④:减少网络流通量
三:存储过程的分类:
1.系统存储过程:
以“sp_”开头,并存放在Resource数据库中
常用的系统存储过程:
系统存储过程 | 说明 |
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] 存储过程名 [参数值]
注:如果执行存储过程的语句是批处理中的第一个语句,则可以不指定EXECUTE关键字
eg:
sp_databases MySchool
GO
2.常用的扩展存储过程
语法:
exec xp_cmdshell DOS 命令[no_output]
注:exec表示调用存储过程,no_output为可选参数,设置执行DOS命令后是否输出返回信息
3.用户自定义的存储过程
创建不带参数的存储过程:
① 创建存储过程
语法:
create procedure 存储过程名 [{@参数1 数据类型} [=默认值] [output], ........, {@参数 n 数据类型} [=默认值] [output] ] as SQL语句
② 删除存储过程
语法:
drop procedure 存储过程名
注:参数置于as前,并且变量前不需要加declare关键字
as后的变量需要declare关键字
eg:创建一个可以查询所有学生信息的存储过程
CREATE PROCEDURE AS select * from Student
创建带输入参数的存储过程:
①:创建带参数的存储过程
如果存储过程的参数后面有"output"关键字,则表示此参数为输出参数;否则视为输入参数,输入参数还可以设置为默认值。
②:执行带参数的存储过程
语法:
exec [返回变量=] 存储过程名 [@参数1=]参数值1 [output] |[default], ....... [@参数1=]参数值n [output] |[default]
eg:
从Result,Student表中查询成绩大于90分的学生的 姓名和成绩:
四:带output参数的存储过程:
五:处理错误信息
raiserror语句:
语法:
raiserror ({msg_id | msg_str}{,severity,state} [with option[,....n]])
分析:利用raiserror语句生成用户定义的错误信息并返回到应用程序。
六:补充
Truncate 与 Delete 三点区别:
1. Truncate不能加where,而delete可以
2. Truncate删除速度快,不记录日志。不能恢复数据
而delete删除速度慢,记录日志,可以恢复数据
3. Truncate 截断表。ID从1开始编号
delete 不会从1开始编号