存储过程
1. 存储过程概述
存储过程(Stored Procedure)是预编译SQL语句集合
这些语句存储在一个名称(存储过程的名称)下并作为单元来处理
存储过程代替了传统的逐条执行SQL语句的方式,
一个存储过程中可以包含查询、插入、删除、更新等操纵的一系列SQL语句,当这个存储过程被调用执行时,这些操作也会同时执行。
- 存储过程优点
- 存储过程可以嵌套使用,支持代码重用
- 存储过程可以接受与使用
动态参数执行其中的SQL语句
- 存储过程比一般SQL语句执行速度快,存储过程在创建时就已经被编译,每次执行不需要重新编译,但是SQL语句每次执行需要重新编译
- 存储过程可以减少网络通讯流量
2. 管理存储过程
2.1 创建存储过程
-- 创建一个名为 Proc_Student 的一个存储过程
create proc Procedure Proc_Student
@Proc_Son int
as
select * from Student where Sno = @Proc_Son
2.2 执行存储过程
存储过程创建完成之后,可以通过
EXECUTE
命令执行,或简写为EXEC
-- 执行存储过程 Proc_Student
exec Proc_Student
2.3 查看存储过程
- 使用 sys.sql.modules 查看存储过程的定义
select * from sys.sql.modules
- 使用 OBJECT_DEFINITION 查看存储过程的定义
OBJECT_DEFINITION(object_id)
- 使用 sp_helptext 查看存储过程的定义
sp_helptext 'Proc_Student'
2.4 修改存储过程
修改存储过程可以改变存储过程当中的参数或语句,可以通过SQL语句中的ALTER PROCEDURE 语句实现。
虽然删除并重新创建存储过程也可以达到修改存储过程的目标,但是会丢失与该存储过程关联的所有权限
1.ALTER PROCEDURE 语句
该语句用来修改通过执行CREATE PROCEDURE语句创建的存储过程
修改存储过程时,不会更改权限,也不影响相关的存储过程或触发器
ALTER PROCEDURE [dbo][Proc_Student]
@Son varchar(10)
as
select * from Student
2.5 重命名存储过程
– 将名为 Proc_Student 的存储过程更名为 Proc_StuInfo
sp_rename ‘Proc_Student’,‘Proc_StuInfo’
更改对象名的任一部分都可能破坏脚本和存储过程
2.6 删除名存储过程
-- 删除名为 Proc_Student 的存储过程
DROP PROCEDURE Proc_Student
Student表
create table Student(
sno int primary key,
sname varchar(50),
sage int default 0,
ssex char(1) default '男',
phone char(11)
)