5.1 存储过程是神马

存储过程是神马?

数据库存储过程能简单理解为:保存在数据库中的参数化的SQL语句,能像类似调用函数一样的使用

例如:我们查user表中,姓名都为张三的,前2条数据

用SQL操作为:select top(2) * from user where name='张三';

但是我们有需要查user表中,姓名都为李四的,前2条数据时,我们有需要写一段SQL,然后改条件where name='李四'

 

这样就又需要写一段,只有where条件不同的SQL,其它都一样

如果我们建立了一个存储过程: sp_getTop2UserByName,参数为name,那么我们再查询'张三'和'李四'时,就只需要如下执行:

exec sp_getTop2UserByName '张三';

exec sp_getTop2UserByName '李四';

就像调用函数一样。

 

SQL和存储过程的区别

数据库底层对sql和存储过程的执行都完全一样,但是存储过程缓存了执行计划,当数据量和并发较大时,能更快的返回结果

so,业务操作,尽量使用存储过程来操作数据库,比如一些很复杂的多表查询统计的sql,执行速度会快。

存储过程中能声明变量和使用if之类的条件判断,比一条SQL语句而言能处理更多复杂的逻辑。

 

SQLServer存储过程中常用语法

创建存储过程

create procedure 存储过程的名字

    参数名  参数类型,

    参数名  参数类型

as

begin

    具体的操作

end

 

例子:新建一个查user表中,姓名都为xx的,前2条数据的存储过程sp_getTop2UserByName

create procedure sp_getTop2UserByName

    @name varchar(50)

as

begin

    select top(2) * from user where name=@name;

end

 

 

执行存储过程

exec 存储过程的名字 参数1, 参数2...;

exec sp_getTop2UserByName '张三'

 

在存储过程中的参数

分为输入和输出参数两种

-输入参数:传入存储过程的参数

-输出参数:存储过程执行完后,能传出值的参数,加上一个out的就是输出参数

create procedure sp_get

    @in_param int,

    @out_param int out

as

begin

    set @out_param = 10;

end

执行完存储过程后,能获取到out_param参数的改变的值,就像.Net的引用类型参数一样

 

在存储过程中使用变量

定义:declare  变量名  变量类型;

          declare  name varchar(50);

使用:@变量名

          @name

赋值:set @变量名 = 值;

          set @name = '王二麻子';

 

 

在存储过程中使用条件判断

if  条件

begin

  操作

end

else

begin

  操作

end

 

例子:如果要查询的姓名为'张三',则返回姓名为'张小三'的数据;

if  @name = '张三'

begin

  select top(2) * from user where name='张小三';

end

else

begin

  select top(2) * from user where name=@name;

end

posted on 2013-11-28 20:47  CodeSchool官方博客  阅读(269)  评论(0)    收藏  举报