sqlserver自定义函数与存储过程的区别.docx
- 文档编号:15482076
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:9
- 大小:16.49KB
sqlserver自定义函数与存储过程的区别.docx
《sqlserver自定义函数与存储过程的区别.docx》由会员分享,可在线阅读,更多相关《sqlserver自定义函数与存储过程的区别.docx(9页珍藏版)》请在冰点文库上搜索。
sqlserver自定义函数与存储过程的区别
sqlserver自定义函数与存储过程的区别
这篇文章主要介绍了谈谈sqlserver自定义函数与存储过程的区别,需要的朋友可以参考下。
一、自定义函数:
1.可以返回表变量
2.限制颇多,包括
不能使用output参数;
不能用临时表;
函数内部的操作不能影响到外部环境;
不能通过select返回结果集;
不能update,delete,数据库表;
3.必须return一个标量值或表变量
自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
二、存储过程
1.不能返回表变量
2.限制少,可以执行对数据库表的操作,可以返回数据集
3.可以return一个标量值,也可以省略return
存储过程一般用在实现复杂的功能,数据操纵方面。
=========================================================================
SqlServer存储过程--实例
实例1:
只返回单一记录集的存储过程。
表银行存款表(bankMoney)的内容如下
Id
userID
Sex
Money
001
Zhangsan
男
30
002
Wangwu
男
50
003
Zhangsan
男
40
要求1:
查询表bankMoney的内容的存储过程
createproceduresp_query_bankMoney
as
select*frombankMoney
go
execsp_query_bankMoney
注*在使用过程中只需要把T-Sql中的SQL语句替换为存储过程名,就可以了很方便吧!
实例2(向存储过程中传递参数):
加入一笔记录到表bankMoney,并查询此表中userID=Zhangsan的所有存款的总金额。
Createprocinsert_bank@param1char(10),@param2varchar(20),@param3varchar(20),@param4int,@param5intoutput
withencryption---------加密
as
insertintobankMoney(id,userID,sex,Money)
Values(@param1,@param2,@param3,@param4)
select@param5=sum(Money)frombankMoneywhereuserID=‘Zhangsan’
go
在SQLServer查询分析器中执行该存储过程的方法是:
declare@total_priceint
execinsert_bank‘004’,’Zhangsan’,’男’,100,@total_priceoutput
print‘总余额为’+convert(varchar,@total_price)
go
在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容):
1.以Return传回整数
2.以output格式传回参数
3.Recordset
传回值的区别:
output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。
实例3:
使用带有复杂SELECT语句的简单过程
下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。
该存储过程不使用任何参数。
USEpubs
IFEXISTS(SELECTnameFROMsysobjects
WHEREname=‘au_info_all’ANDtype=‘P’)
DROPPROCEDUREau_info_all
GO
CREATEPROCEDUREau_info_all
AS
SELECTau_lname,au_fname,title,pub_name
FROMauthorsaINNERJOINtitleauthorta
ONa.au_id=ta.au_idINNERJOINtitlest
ONt.title_id=ta.title_idINNERJOINpublishersp
ONt.pub_id=p.pub_id
GO
au_info_all存储过程可以通过以下方法执行:
EXECUTEau_info_all
--Or
EXECau_info_all
如果该过程是批处理中的第一条语句,则可使用:
au_info_all
实例4:
使用带有参数的简单过程
CREATEPROCEDUREau_info
@lastnamevarchar(40),
@firstnamevarchar(20)
AS
SELECTau_lname,au_fname,title,pub_name
FROMauthorsaINNERJOINtitleauthorta
ONa.au_id=ta.au_idINNERJOINtitlest
ONt.title_id=ta.title_idINNERJOINpublishersp
ONt.pub_id=p.pub_id
WHEREau_fname=@firstname
ANDau_lname=@lastname
GO
au_info存储过程可以通过以下方法执行:
EXECUTEau_info‘Dull’,‘Ann’
--Or
EXECUTEau_info@lastname=‘Dull’,@firstname=‘Ann’
--Or
EXECUTEau_info@firstname=‘Ann’,@lastname=‘Dull’
--Or
EXECau_info‘Dull’,‘Ann’
--Or
EXECau_info@lastname=‘Dull’,@firstname=‘Ann’
--Or
EXECau_info@firstname=‘Ann’,@lastname=‘Dull’
如果该过程是批处理中的第一条语句,则可使用:
au_info‘Dull’,‘Ann’
--Or
au_info@lastname=‘Dull’,@firstname=‘Ann’
--Or
au_info@firstname=‘Ann’,@lastname=‘Dull’
实例5:
使用带有通配符参数的简单过程
CREATEPROCEDUREau_info2
@lastnamevarchar(30)=‘D%’,
@firstnamevarchar(18)=‘%’
AS
SELECTau_lname,au_fname,title,pub_name
FROMauthorsaINNERJOINtitleauthorta
ONa.au_id=ta.au_idINNERJOINtitlest
ONt.title_id=ta.title_idINNERJOINpublishersp
ONt.pub_id=p.pub_id
WHEREau_fnameLIKE@firstname
ANDau_lnameLIKE@lastname
GO
au_info2存储过程可以用多种组合执行。
下面只列出了部分组合:
EXECUTEau_info2
--Or
EXECUTEau_info2‘Wh%’
--Or
EXECUTEau_info2@firstname=‘A%’
--Or
EXECUTEau_info2‘[CK]ars[OE]n’
--Or
EXECUTEau_info2‘Hunter’,‘Sheryl’
--Or
EXECUTEau_info2‘H%’,‘S%’
=‘proc2’
实例6:
if...else
存储过程,其中@case作为执行update的选择依据,用if...else实现执行时根据传入的参数执行不同的修改.
--下面是if……else的存储过程:
ifexists(select1fromsysobjectswherename=‘Student’andtype=‘u’)
droptableStudent
go
ifexists(select1fromsysobjectswherename=‘spUpdateStudent’andtype=‘p’)
dropprocspUpdateStudent
go
createtableStudent
(fNamenvarchar(10),
fAge
smallint,
fDiquvarchar(50),
fTelint)
go
insertintoStudentvalues(‘X.X.Y’,28,‘Tesing’,888888)
go
createprocspUpdateStudent
(@fCaseint,
@fNamenvarchar(10),
@fAgesmallint,
@fDiquvarchar(50),
@fTelint)
as
updateStudent
setfAge=@fAge,--传1,2,3都要更新fAge不需要用case
fDiqu=(casewhen@fCase=2or@fCase=3then@fDiquelsefDiquend),
fTel=(casewhen@fCase=3then@fTelelsefTelend)
wherefName=@fName
select*fromStudent
go
--只改Age
execspUpdateStudent
@fCase=1,
@fName=N’X.X.Y’,
@fAge=80,
@fDiqu=N’Update’,
@fTel=1010101
--改Age和Diqu
execspUpdateStudent
@fCase=2,
@fName=N’X.X.Y’,
@fAge=80,
@fDiqu=N’Update’,
@fTel=1010101
--全改
execspUpdateStudent
@fCase=3,
@fName=N’X.X.Y’,
@fAge=80,
@fDiqu=N’Update’,
@fTel=1010101
以上就是精品学习网为大家提供的关于sqlserver自定义函数与存储过程区别的相关内容,希望能够帮助到大家。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sqlserver 自定义 函数 存储 过程 区别
![提示](https://static.bingdoc.com/images/bang_tan.gif)