什么是存储过程?
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