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
code is my life. ——codeschool.cn
posted on 2013-11-28 20:47 CodeSchool官方博客 阅读(269) 评论(0) 收藏 举报
浙公网安备 33010602011771号