我想过成功,我想过失败,但是,我从来没有想过放弃。。。

存储过程章学习笔记

上一篇 / 下一篇  2012-06-15 17:15:34 / 个人分类:数据库

存储过程概述

什么是存储过程?

1)与编程语言中的函数非常相似;

2)存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。存储过程可包含程序流、逻辑以及对数据库的查询。他们可以接受参数、输出参数、返回单个或者多个结果集及返回值。

为什么要使用存储过程?

1) 存储过程与其他应用程序共享应用程序逻辑。因而确保了数据访问和修改的一致性。存储过程可以封装业务功能,在存储过程中可以在同一位置改变封装的业务规则和策略。所有客户端可以使用相同的存储过程来确保数据访问和修改的一致性;

2) 存储过程具有安全性和所有权链接,

存储过程的种类有哪些?

创建存储过程

1) 存储过程的语法格式:

2) 实例:创建带有参数和不带参数的存储过程

--创建不带参数的存储过程

createprocedureproc_Goods22

as

select*fromGoodsInfo

--执行存储过过程

execproc_Goods22

 

--创建带有参数的存储过程

createprocedureproc_Goods33

@classnvarchar(20)

as

select*fromGoodsInfowhereClass=@class

--执行存储过过程

execproc_Goods33 @class='食品'

使用带默认值的参数

1) 我们设计参数的时,设计具体参数后在执行时就要执行具体的值,如果我不希望指定具体值,那么恩吗可以在创建时指定一个默认的值。

2) 需要实现查看当前类别下的下所有商品的信息

 

有如下数据表

SELECT*fromGoodsInfo

SELECT*FROMGoodsClass

--创建带有默认参数的存储过程

useGoods

go

createprocproc_Goods5

@lbid1nvarchar(20),          --类别编号,GoodsClass

@class1nvarchar(20)='家用电器'--类别名称,GoodsInfo

as

selectA.GoodsID,A.GoodsName,A.GoodsPrice,B.ClassID,B.ClassName

fromGoodsInfo A,GoodsClass B

wherea.LBID=b.ClassIDanda.LBID=@lbid1andb.ClassName=@class1

 

--执行存储过程,一下语句中在创建的时候已经指定了@class1的参数所有执行的时候可以不再指定

execproc_Goods5 @lbid1='SPLB05'

使用输出参数

1) 案例

有如下数据表

SELECT*fromGoodsInfo

SELECT*FROMGoodsClass

--使用输出参数:实现调用存储过程根据商品类别编号获取一类商品的平均价格

createprocp_price

@class1nvarchar(10),

@price1moneyoutput

as

select@price1=avg(A.GoodsPrice)

fromGoodsInfo A,GoodsClass B

whereA.LBID=B.ClassIDandB.ClassName=@class1

 

--调用创建的存储过程

declare@price2int

execp_price @class1='服装、鞋',@price1=@price2output

print@price2

--或者如下:定义的变量(@class1,@price1)显示都显示不显示都不显示

declare@price2int

execp_price'服装、鞋',@price2output

print@price2

查看存储过程

1) 可编程性---.>存储过程中的表-à右键“编写存储过程脚本为”

2) 查看存储过程:

--查看存储过程

execsp_helptextp_price

执行前选择“以文本格式显示结果”

3) 保存存储过程

可编程性--->存储过程中的表-à右键“编写存储过程脚本为”-àCREATE-à文件,来进行保存。

嵌套存储过程

1) 存储过程的嵌套最多可以达到32

2) 通过调用存储过程返回商品类别为“家用电器”的信息

--已经存在的存储过程

execproc_Goods5 @lbid1='SPLB05'

--在存储过程get_GoodsInfo1中调用存储过程proc_Goods5

useGoods

go

createprocget_GoodsInfo1

as

select*fromGoodsInfo

execproc_Goods5'SPLB05'

--执行存储过程

execget_GoodsInfo1

3) 查看存储过程的级别

--查看存储过程的级别

--1)在可编程性--存储过程--proc_Goods5”---右键修改

--2)新加语句:print @@nestlevel并执行

setANSI_NULLSON

setQUOTED_I

TAG:

 

评分:0

我来说两句

Open Toolbar