- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TSQL存储过程与游标
存储过程、游标
上午
存储过程
一、遇到的问题
我们在之前学习的课程写了不少的批处理语句,这些批处理语句存在两个问题:
没法像函数那样传参数运行(自定义化)
没法像函数那样可以反复地调用(功能化模块化)
说到这里,我们可以猜到,数据库中应该可以建立函数形式的数据库对象来解决这样的问题。但是介绍这种数据库对象之前,我们再来看几个需要解决的问题:
我们已经学会把一条select语句封装在视图中,但是它只能用来查询,如果我们希望进行其它操作,比如增删改记录、建删库表等,是不能用视图来完成的。
另一方面,如果把一个带有更改操作的批处理整个存储成数据库对象,还可以把处理数据的程序移动到离数据尽可能近的地方,而不是总把这些操作写在客户端程序(如Java、C#)中。通过将处理数据的程序从客户应用程序移动到服务器,可以降低网络流量,并提高性能和数据的完整性。
二、存储过程的概念
解决上面的问题,我们可以使用一种叫做“存储过程”的数据库对象。
存储过程(Stored Procedure)把我们的复杂sql语句保存数据库。之前视图是保存在服务器上的命名语句,与之类似,存储过程是保存在服务器上的命名批处理,系统将预先对它进行编译。T-SQL语句,如数据存取语句、流程控制语句、错误处理语句等,使用起来弹性很大 system stored procedure 前缀sp_sp_help sp、helpdb
扩展存储过程 extended stored procedure 前缀xp_xp_cmdshell
用户自定义存储过程 user-defined stored procedure 也就是我们自己创建的
三、用户自定义存储过程的创建、修改、删除
【创建create proc 存储过程名 --无参数的存储过程
as
批处理语句
go修改as
批处理语句
go删除--插入一个以时间为用户名的用户
create proc insUser
as
begin tran
declare @username varchar(20)
set @username=convert(varchar(8),getdate(),112)+replace(convert(varchar(10),getdate(),8),:,)
if not exists(select * from yonghu where yonghuming=@username)
insert into yonghu values
(@username,111111,@163.com,新用户)
commitgo
然后使用exec执行这个存储过程:
exec insUser
选中exec这一行,然后按F5快速地反复执行,你会发现在同一秒内只能插入一个用户。
这个存储过程一旦建立就不能再次执行这段代码了,可以把create改成alter来修改。
注意存储过程的代码中不能go语句,因为go是用来提交批的,一旦遇到go系统会认为这个存储过程的代码已经书写完毕,会提交create或者alter的批处理。如果希望在存储过程中执行另一个批处理,请把该批处理写成另一个存储过程并调用。
四、用户自定义存储过程的参数传递和返回值
【传递参数】
create|alter proc 存储过程名
@参数名 参数类型[,
@参数名 参数类型...]
as
批处理语句
godeclare @tablename nvarchar(10),@id varchar(10),@idvalue int
declare @sql varchar(100)
set @tablename=yiren
set @id=yirenid
set @idvalue=10
set @sql=select * from +@tablename+ where +@id+ = +cast(@idvalue as varchar)
print @sql
exec(@sql)
现在我们把它写成存储过程。这样我们每次都可以从一个指定表中提取我们想要的记录了
create proc queryItem
@tablename nvarchar(10),
@id varchar(20),
@idvalue int --参数外面还可以套上圆括号,看起来更加清晰
as
declare @sql varchar(100)
set @sql=select * from +@tablename+
where +@id+ = +cast(@idvalue as varchar)
exec(@sql)
go
调用的方法:
exec queryItem yiren,yirenid,@idvalue=10
queryItem jingjiren,jingjirenid,1
存储过程不使
您可能关注的文档
最近下载
- 《现代家政基础》 项目六 现代家庭安全.pptx
- 高考思想政治一轮总复习精品课件 选必3 逻辑与思维 第三单元 运用辩证思维方法-第九课 理解质量互变.ppt VIP
- 临床营养科建设与管理指南(试行).doc VIP
- 2025年中考复习必背外研版初中英语单词词汇(精校打印) .pdf VIP
- 年产55万吨环氧乙烷乙二醇车间环氧乙烷合成工段工艺设计.doc VIP
- 食堂食材配送采购投标方案(技术标).doc
- 临床常用200种常用中药饮片排名.docx VIP
- 德力西850W交流角磨机说明书.pdf VIP
- 2025年四川省内江市中考数学试卷.docx VIP
- 【完整升级版】电力施工组织设计施工方案.doc
文档评论(0)