在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → SqlServer存储过程、游标讲解

SqlServer存储过程、游标讲解

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:1.01M
  • 下载次数:16
  • 浏览次数:117
  • 发布时间:2020-09-28
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
SqlServer存储过程、游标讲解SqlServer存储过程、游标讲解
表明所有的提取操作(如FRST、LAST、 PRIOR、NEXT、 RELATIVE、 ABSOLUTE都可用。如果不使用该保留字, 那么只能进行NEX「提取操作。由此可见, SCROLL极大地增加了提取数据的灵活性,可以随意读取结果集中的仼一行薮 据记录,而不必关闭再 重开游标。 132打开游标 非常简单,我们就打开刚才我们声明的游标 mycursor OPEN mycursor 133读取数据 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodehighlightercOm/ FTCH[N№EXT/PROR/FRST/ LAST FROM〖游标名/@游标变量名}[INTO@变量名L,…77 参数说明: NEXT取下一行的数据,并把下一行作为当前行(递増)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次 执行 FETCH NEX「操作将取得游标集中的第1行数据。NEXT为默认的游标提取选项 INTO@变量名…]把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关 联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标 近择列表中的列的数目一致。 现在我们就取出 mycursor游标的数据吧! 当游标被打开时,行指针将指冋该游标集第1行之前,如果要读取游标集中的竻1行数据,必须移动行指针使其指向第1 行。就木例血言,可以使用下列操作读取笫1行数据: Eg: Fetch next from mycursor X )U Fetch first from mycursor 这样我就取岀了游标甲的数据,但是光光这样可不够,我们还需要将取岀的薮据赋给变量 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.Codehighlightercom/ >/声明2个变量 declare@O| D NVARCHAR(20) declare@ A Salary float/将取出的值传入刚才声明的2个变量 Fetch next from mycursor into@OD,@ A Salary1·3,4关闭游标 CLOSE mycursor 1.35删除游标 DEALLOCATE mycursor 136实例训练 如上我介绍完了游标使用的5个步骤,那现在我们就来上上手,练习用游标取山衣2 AddSalary的数据。 为了运行我们自己创建的游标,我们将游标写在存储过程里,方便我们看到游标的整个使用过程。 在 sqlserver2000中新建一个存储过程: Code highlighting produced by Actipro CodeHighlighter(freeware) http://www.Codehighlighter.com/ > CREATE PROCEDURE PK Test AS/声明2个变量 declare@O_| D nvarchar(20) declare@ A Salary float∥ 声明一个游标 mycursor, select语句中参数的个数必须要和从游标取出的变量名相同 declare mycursor cursor for select OD, A Salary from Addsalary/打开游标 open mycursor/从游标里取出数据赋值到我们刚才声明的2个变量中 fetch next from mycursor into@OD,@ A Salary/判断游标的状态/ o fetch语句成功∥-7 fetch语句失败或此行不在结果 集中∥/2被提取的行不存在 While@@ fetch status=o) begin/显示出我们每次用游标取出的值 print游标成功取出 条数据'pint@O_| D print@ A Salary/用游标去取下一条记录 fetch next from mycursor into@O|D,@ A salary end 关闭游标 close mycursor//撤销游标 deallocate mycursor GO 通过上面的注释,我想大家都明白了整个游标的创建过程了吧。但是我们现在还是一个抽象的了解,我们学任何知识,都要 用于实践,这样才能使抽象的东西变的只体。 那我们就运行这个存储过程,看看游标到底是怎么取值的: 我们打开 SQLSERVER2000的查询分析器,制定好数据库后,我们执行存储过程 Exec PK Test 让我看看效果吧(如图) SL雪分[询一MRSP5MADE一无桥题1 文件辑(查询Q工具工窗口(吗華助( 日X 回|8回的画,y"rst·詈民臼〓 对更浏览 目WrEG0Eck(a xec =k SalaryAdd 目 bestwig三 中d 用,表 到abo. Addsalary el 目U_ I nvar chat(U),oul 目0 Hame (nvarchar(2)F1 k_Ic o_Jame o_Sala=y □约 9g9.0 相关性 07002小吐 , 07003小胖 +Edb 系玩表 视囚 存过程 函数 用户定义的教据类型 国格国潲息 智对歌顽板 批查询完成 CFO6QF5A230)ka(52)besc0:3行行4,列1 连接:1 C好听音乐连摇 游标教学囫 网游标~rc s孟期五 查询分析器 1百度搜索@在 游标执行一画图 通过实例我们可以看到游标逐行逐行都把值都取出来了。那么我请大家先不看下面的答案,在引言部分我刚才留个大家 的问题试一下能不能解决? 现在我们写一个存储过程解决刚才我留下来的问题吧 Code highlighting produced by Actipro CodeHighlighter (freeware) http://ww.CodehighlightercOm >CREATE PROCEDURE PK SalaryAdd as declare @o ID nvarchar(20), @A Salary float declare mycursor cursor for select OID, A Salary from Addsalary open mycursor fetch next from mycursor into @o ID,QA Salary while(@@fetch_status =0) begin Update Origin Salary set o_ Salary=o_ Salary+@A_ Salary where_ID=@O_ID fetch next from mycursor into @o ID, @A Salary end close mycursor deallocate mycursor Go 按照老方法,我们用查询分析器来执行我们的存储过程,看看结果是怎么样的? Exec PK_Salary Add 让我看看效果吧(如图) SL询分析器气[查许一 MICEOSOF-hCCATA bestsa=无标题 立件编最日询(Q「具D密口③帮助出 自區圖国廳的“画,√卜■rt智員囹匿 浏览器 PK_Salaryadd 彐 MTC RASF-5mAA 用,表 dbo. addt E dbo. atprcpertie E0_- (nvarchar(20).NoNull 目0_ Salary 约束 所响的行数为1行〕 由凵相性 □触发器 所影响的行數为1行 彐。. People dbo. peopletest □系我表 所鼎响的行数为1行 □视圈 口存闻过程 □函数 +□用户定义的数据类型 网格国消息 智对原板 批查询完成 TCRF5A2:30)a(52) DbTest C: Or:m0n行行3,列1 连接:1 )当⊙好听音择厘播M游标学 回游标一M 嘎5查分析器[百度搜@e解用5A 2007-9-4 点击查看人图 执行存储过程,看到我们影响了3行数据 用sq语句,看看表 Origin Salary现在的结果: S查分析器一[查询一MHSF5CM2Dba一无标题 文件编辑查询①工具江)窗口帮助出 自·些副回电龜回的"回,y卜■rst,端智民臼〓 对更浏览强 2k_ SalaryAdd 月日由+± 口用表 +倒dbo. ddss ary 国b elary 列 目U_- d Nvarchar以U,o:hl 目0 Hame (nvarcH(23),平11 目08∝xy〔 凵 b_It o_yame 0_Sa1 约束 39g9.0 由国相关性 2Y2[0702小吐 07003小胖 + dbo. peopletest 口系统表 中口视 □存过程 □函数 +用户定义的教据类型 ∪4pt ][]madel 「回r指国 智对思艰板 批查询完成 CROF5A280sa(52) DbTest c00:3行行4,列1 连接:1 e(好听音乐“连播隔游标教学图 游标一MaCs QL ServEr Enterpr 喂3查分析器[…,百度搜列5形影游标执行。面图 点击查看大图 14结束语 很高兴大家能把这个教程看完,其实这只是游标的最最基础的一个应用,显示生活的逻辑的关系中,可能有更复杂的游 标。但是我们只有学会走路,才能跑步嘛 利用游标逐行吏新、存储 游标中用到的函数,就是前一篇文章中创建的那个函数 另外,为了方使使用,把游标放在存储过程中,这样就可以方使地直接使用存储过程来执行游标了。 1 create prccedure Update:KUNo-存储过程里血放置游标 2 as declare UpdatcHKUNoCursor cursor 声明一个游标,查询满足条件的数据 for select psr code from person where type 'E and ku no is null open Update.KUNoCurscr-打开 10Gec- are enoToUpdate varchar(20)-声明一个变量,用于读取游标中的值 fetch next from UpdateHKUNoCursor into idnoToUpdate 12 13 whi-e fetch status=0 循环读取 begin 15 int @noToUpdate 16 update pcrson set hku no-dbo GstExtUscr-KUNo() where pan codc-enoToUpdato 17 fetch next from UpdateHKUNoCursor into gnoToUpdate 18 erd ⊥9 20c1 ose UpdateHKUNOCursor关闭 dea-1 ocate UpdateHKUNoCursor--朋除 23 24 end 25 26 --cxcc UpdatcHUNO 另外,判断数据库中是否存在某一存储过程(Sq| server20oO): if exists (select trom sysobjects where name='Update-KUNo ard xtype =pi print. yse print no 既然说到存储过程,顺便记汞多一些~ 无参数的存储过程的创建、修改、执行、删除 create procedure Myprocedure--创建,修改时是 alter becin -do something select from sysobjects end execute myprocedure--执行 drop procedure Myprocedure 、带传入参数的存储过程: View Code 传入参数,还有另外一种形式 crcatc proc Procwithparam-创建带有传入参数的存储过程 did int 参数没有用括号标记 becin se1ect* from sysobjects where id=8id--使用参数 exec ProcwithParaIl4--执行时,在右边附带参数 drop proc procwitrfaram 、带传出参数的存储过程(如果要传入、传出的,则把这个和前面第二个综合就好啦):) create proc ProuwithParamout( @date datetime out)-不带ut,将被默认为传入参数! as becin select date= cordate from sysobjects where iα-1--传出参数只能是一个值,如果不带条件地查找,得到的数值是一个列 表,将只取最后一个值 declare @date datetime 声明一个变量,用于接收存储过程传出的参数 exec ProuNithParamout adate out 凋用时,需要右边附带用于接收传出参数的变量 select@ date as·存储过程传出的参数!-取得传出的参数,并自定义列名 注:传出参数的声明也可以像传入参数那样与,不需括号 create proc ProuithParamout 不带ut,将被默认为传入参数! adate datet ime out as becin elect edate=crdate from sysobjects where id=4 传出参数只能是一个值,如果不带条件地查找,得到的数值是一个列 表,将只取最后一个值 end SaIScrvcr游标及其循环语句 整理一下,关于游标,MSDN有: 过 Transact-SQL服务器游标检索特定行。 Transac-SQL语法约定 参数 NEXT 紧跟当前行返回结果行,并且当前行递増为返回行。如果FEτ CH NEXT为对游标的第一次提取操作,则返叫结果集中的第 行。NEXT为默认的游标提取选项。 PRIOR 返回紧鸰当前行前面的结果行,并且当前行递减为返回行。如果 FETCH PRIOR为对游标的第一次提取操作,则没有行返 回并且游标置于第一行之前。 FIRST 返回游标中的第一行并将其作为当前行。 LAST 返回游标中的最后一行并将其作为当前行。 ABSOLUTE i n/@nvar 如果刀或@mwa为正,则返回从游标头开始向后的第n行,并将返回行变成新的当前行。如果m或@mvar为负,则 返叫从游标末尾开始向前的第m行,并将返叫行变成新的当前行。如果n或@mvar为O,则不返回行。m必须是整数常 量,并且@mar的数据类型必须为 smallint、 tinyint或int RELATIVE{〃/@may 如果n或@mwa为正,则返凹从当前行开始向后的第n行,并将返回行变成新的当前行。如果m或@mvar为负,则 返回从当前行开始向前的第n行,并将返凹行变成新的当前行。如果n或@ar为O,则返回当前行。在对游标进行第 次提取时,如果在将〃或@var设置为负数或o的情况下指定 FETCH RELATⅣVE,则不返囯行。门必须是整数常量, @mvar的数据类型必须为 smallint、 tinyint或int。 GLOBAl 指定 cursor name是指全局游标。 【实例截图】
【核心代码】

标签:

实例下载地址

SqlServer存储过程、游标讲解

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警