储存过程

本文参考:

  1. http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html
  2. https://blog.csdn.net/lengxiao1993/article/details/53427266
  3. http://www.cnblogs.com/aabbcc/p/6626372.html

一、什么是存储过程(Stored Procedure)

   存储过程是一段存储在数据库的“子程序”,本质是一个可重复使用的SQL代码块,可以理解为数据库端的“方法”。

   存储过程的好处:

    ①提高性能:由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

    ②提高通信速率:网络通信中传输的内容是存储过程名字,相比传输大量的sql语句网络的要通信量小,提高通信速率。

    ③提高安全性能:存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。 

    举例: 假如某个应用程序要向用户提供修改密码的功能,而不同用户的用户名和密码都存储在一张User表中。

    如果,如果不使用存储过程, 该应用程序在访问数据库时, 必须已具有操作“User”表权限的用户身份去连接数据库。此时如果程序员编写的代码出错,或者程序员想恶意修改别人的password, 则数据库User表的安全无法保证。

    如果使用存储过程,则可以定义一个具有修改User表权限的存储过程changePassword(username, oldPassword, newPassword), 该存储过程实现了严格的校验逻辑,即首先检查useranme, oldpassword是否匹配, 如果匹配, 则仅仅修改username所对应的password。

二、Sql Server使用存储过程

  1、创建存储过程

  例子使用的UserInfo表只有 UserName,UserPass,Email和主键 Id 列

   ① 简单的无参查询(查询用户名和密码)

--创建名为GetUserInfo的存储过程
create proc GetUserInfo
as 
select username,userpass from UserInfo 
go

--执行存储过程
exec GetUserInfo

  ② 有返回值的简单插入用户(插入一条新纪录,返回受影响的行数)

--创建名为InsertUserInfo的存储过程
create proc InsertUserInfo
as 
insert into userinfo (username,userpass,email) values ('newuser','123','[email protected]') 
return @@rowcount
go

--执行存储过程
exec InsertUserInfo

  ③ 有输入输出参数的简单查询(查询Id小于参数的用户信息,out 结果集条数)

create proc GetUserInfoLtId
        @id int=20,--默认值
        @count int output
    as
        select * from userinfo where  id<@id
        set @count=(select COUNT (*) from userinfo where  id<@id)
   
--执行
    declare @c int;
    execute GetUserInfoLtId 50 ,@count=@c output;
    print @c

  

猜你喜欢

转载自www.cnblogs.com/wyy1234/p/9028796.html
今日推荐