SQL存储过程笔记
一、概述
存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
优点: 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参数
关于调用存储过程传递参数过程中遇到的错误,贴个图记录一下:
多个参数,参数传递方式必须统一