存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户经过指定存储过程的名字并给出参数(若是该存储过程带有参数)来执行它。数据库
优势: 1.因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划,不像解释执行的SQL语句那样在提出操做请求的时候才进行语法分析和优化工做,于是运行效率高,它提供了在服务端快速运行SQL语句的有效途径。编程
2.存储过程下降了客户机和服务器之间的通讯量,客户机上的应用程序只要经过网络向服务器发出存储过程的名字和参数,就可让RDBMS执行许多条SQL语句,并执行数据处理,只有最中结果才返回客户端。服务器
3.存储过程容许标准组件式编程,存储过程在被建立之后能够在程序中被屡次调用,而没必要从新编写该存储过程的SQL语句。并且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(由于应用程序源代码只包含存储过程的调用语句),从而极大地提升了程序的可移植性。网络
declare @variable int 或者 @variable int 优化
多个变量的声明 declare @variable int, @va vachar(10),.... spa
区别:declare的含义是定义一个存储过程当中使用的变量,而不加declare的是存储过程须要传入的参数,下面一个具体的实例能够看得更清楚:code
--建立存储过程 create procedure sl_procedure @va int --参数声明 as declare @variable int --变量声明 set @variable=22 --变量赋值 select * from Albums where ArtistId=@va --执行存储过程 exec sl_procedure 12 --12 为传入的参数
set @variable=22 --变量赋值
变量赋值时变量前必须加setblog
3.条件控制语句:it
if(条件) begin --执行语句块 end else begin --执行语句块 end
while(条件) begin --执行语句块 end
--根据专辑名 查找艺术家 --建立存储过程 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' -- 参数传入
--根据专辑名 输出艺术家 --建立存储过程 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参数编译
关于调用存储过程传递参数过程当中遇到的错误,贴个图记录一下:
多个参数,参数传递方式必须统一