SQL Server学习之路

今天给大家说说存储过程。

存储过程我最开始接触的时候感觉很麻烦的,因为有很多语法,比如输入输出参数,变量的定义,异常的抛出等等。

这里呢简单的介绍一下存储过程的写法:

createprocedureprocedure_name[;version number]

[{ @parameter data_type} [varying][=default value][output]][,...n][with ][for replication]assql_statement[...n]

解释:

procedure_name是存储过程的名称,最多可有128个字符;

version number为版本号

@parameter是存储过程参数名。可以声明一个或多个参数,当调用该存储过程时,除非定义了参数缺省值,用户必须给出所有的参数值。一个存储过程至多有1024个参数,参数可以用作存储过程中的变量名,但参数不能用作列名、表名或其他数据库对象的名称

data_type是参数的数据类型。在存储过程中所有的数据类型都可被用作参数,但是如果参数为游标(cursor)数据类型,则该参数必须被指定为varing和output。

varying指定由output参数支持的结果集,仅应用于游标参数。

default value是指参数的缺省值。

output表明该参数是一个返回参数。用output参数可以向调用者返回信息,该参数在存储过程中可以变化,但是Text类型参数不能用作output参数。

recompile指明sql server并不保存该存储过程的执行计划,该存储过程每执行一次都要重新编译。默认每次调用时都使用同一计划

encryption为syscomments表中存储过程条目加密,防止用户查看编译后的语句。

for replication选项指明了该存储过程只能在复制过程中执行

sql_statement是包含在存储过程中的任何数量和类型的sql语句

示例:创建存储过程usp_select_teacher,查询特定系的教师的信息,判定教师的年龄结构,并将该系教师的平均年龄和最大年龄传递给用户。

create procedure usp_select_teacher

@depart char(10),

@avg_age int output,

@max_age int output

as

select * from teacher

where dname= @depart

select @max_age= max(age ) from teacher

where dname= @depart

select @avg_age= avg(age )from teacherwhere dname= @depart

if @avg_age

select ' 年龄结构'= '年龄结构偏年轻', '平均年龄' =@avg_age

if @avg_age >30and @avg_age

select ' 年龄结构'= '年龄结构合理', '平均年龄' =@avg_age

if @avg_age >40

select ' 年龄结构'= '年龄结构偏大', '平均年龄' =@avg_age

调用存储过程

sql server使用execute命令调用存储过程

示例:调用存储过程usp_select_teacher,并查看其输出参数的值。

declare @avgage int ,@maxage int

execute usp_select_teacher ' 计算机', @avgage output, @maxage output

存储过程是由SQL语句和控制语句构成的语句串(语句集合)。它不仅可以带有输入参数还可以带有输出参数,存储过程能够通过接收参数,向调用者返回结果集,结果集的格式由调用者确定。返回状态值给调用者,指明调用成功还是失败,包括针对数据库的操作语句,并且可以在一个存储过程中调用另一存储过程。 另外存储过程好处不必多说,比如支持sql重用、执行速度快、减少网络流量、安全可靠。

在sql server中存储过程分为两类:系统提供存储过程和用户自定义存储过程。 系统存储过程主要存储在master数据库中,并以sp_为前缀,主要是从系统表中获取信息;用户存储过程由用户创建并完成特定功能,这里我主要写的是用户存储过程。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180207G1B2P200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券