您的位置:首页 > 其它

存储过程自学

2016-04-07 15:34 281 查看
**存储过程:

概念:procedure存储过程是为了完成一组特定功能的sql语句的集合,经过编译后存储在数据库中,用户通过指定存储过程的名称并且给出参数来调用执行!

特点:1:存储过程可以包括逻辑控制语句和数据操纵语句(DML)。

2:存储过程可以接收参数,输出参数,返回单个或者多个结果集以及返回值。

3:存储过程由于在创建的时候就进行了编译并且存储在数据库当中,所以运行效率上要快于一般SQL。

优点:1:代码重复调用:可以多次被调用执行,无需重新编写该存储过程的sql语句。开发人员可以随时都存储过程的sql语句进行更改,而对代码来说毫无影响提高了代 码的可移植性。

2:运行效率:存储过程可以是预编译的,所以运行效率远远大于批处理的sql语。(因为批处理语句是每执行一次就编译一次)

3:减轻网络流量:当程序调用存储过程的时候,网络中传递的只是该调用语句,否则将会是多条sql语句。从而减少了网络流量,降低了网络负载。

4:系统管理员可以对执行的某一个存储过程进行权限限制,实现对某些数据的访问限制,提高数据的安全性。

创建存储过程:

create proc proc_get_student

as  //as可以省略不写

select * from student;


调用执行存储过程:

exec proc_get_student

创建带参数的存储过程:
create proc proc_find_stu(@startId int, @endId int)
as
select * from student where id between @startId and @endId
go

exec proc_find_stu 2, 4;
带通配符的存储过程:
```
create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')
as
select * from student where name like @name and name like @nextName;
go
exec proc_findStudentByName;
exec proc_findStudentByName '%o%', 't%';
```
带有局部变量的存储过程:
```
CREATE PROCEDURE UserLogin
@name varchar(20),         --全局变量不需要用declare。
@password varchar(20)
AS
-- 定义一个临时用来保存密码的变量
--DECLARE @strPwd NVARCHAR(20) --局部变量需要用declare来表示。
BEGIN
select * from userinfo where userName=@name and userPass=@password
END
GO
首先我们用简单的sql查询
select * from userinfo where userName='admin'
查询结果:
---------------------
UserName  UserPass
Admin      Admin
现在我们来执行我们的存储过程
exec UserLogin admin,admin
--或这样调用:
EXEC UserLogin @name='admin',@password='admin'
查询结果:
---------------------
UserName  UserPass
Admin      Admin
```
带有输出参数的存储过程:
```
create proc proc_getStudentRecord(
--全局参数
@id int, --默认输入参数
@name varchar(20) out, --输出参数
@age varchar(20) output--输入输出参数
)
as
select @name = name, @age = age  from student where id = @id and sex = @age;
go

--局部参数
declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
exec proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name + '#' + @temp;


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: