SQL存储过程笔记

一、概述

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。注意区别function函数,函数调用可以直接出现在表达式中 select fun1() from xx,常用场景,外键关联其他表to_xx(id)

优点

1、由于存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划,不像解释执行的SQL语句那样在提出操作请求的时候才进行语法分析和优化工作,因而运行效率高,它提供了在服务端快速运行SQL语句的有效途径。

2、存储过程降低了客户机和服务器之间的通信量,客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行许多条SQL语句,并执行数据处理,只有最中结果才返回客户端。

3、存储过程允许标准组件式编程,存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。

二、基本语法

1、变量声明:

declare @variable int  或者 @variable int

多个变量的声明 declare @variable int, @va vachar(10),….

区别:declare的含义是定义一个存储过程中使用的变量,而不加declare的是存储过程需要传入的参数,下面一个具体的实例可以看得更清楚:

--创建存储过程
Create procedure sl_procedure
@variable int  --参数声明
as 
declare @va int    --变量声明
set @variable=22 --变量赋值
select * from Albums
where ArtistId=@va
--执行存储过程
exec sl_procedure 12  --12 为传入的参数

2、变量赋值:

set @variable=22 --变量赋值

变量赋值时变量前必须加set。

3、条件控制语句:

if(条件)
    begin
    --执行语句块
    end
else
    begin
    --执行语句块
    end

3、循环控制语句

while(条件)
    begin
    --执行语句块
    end

三、实例分析

1、带输入参数的存储过程

--根据专辑名 查找艺术家

--创建存储过程
Create procedure ArtistNameOut1
@albumTitle varchar(20)  --参数声明
as 
select ar.ArtistName from Artists ar
join Albums al
on ar.ArtistId=al.AlbumId
where al.AlbumTitle=@albumTitle
GO
--执行存储过程
--参数传递方式1,多个参数以 , 号隔开
exec ArtistNameOut1 @albumTitle='Worlds' -- 参数传入
--参数传递方式2,
exec ArtistNameOut1 'Worlds' -- 参数传入

2、带输出参数的存储过程

--根据专辑名 输出艺术家
--创建存储过程
Create procedure ArtistNameOut
@albumTitle varchar(20),  --参数声明
@artistName varchar(20) output --输出参数:output标识
as 
select @artistName=ar.ArtistName from Artists ar
join Albums al
on ar.ArtistId=al.AlbumId
where al.AlbumTitle=@albumTitle
GO
--执行存储过程
declare @returnName varchar(20)
exec ArtistNameOut 'Worlds',@returnName output  -- 参数传入
select @returnName

调用存储过程时需要再声明一个变量,作为output参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值