• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

sqlserver游标使用和循环

php 搞代码 4年前 (2022-01-04) 22次浏览 已收录 0个评论
/***  游标的使用   讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱。   使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。  1.3.1声明游标  最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>;  其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询  例子:[已表2 AddSalary为例子]  Declare mycursor cursor for select * from AddSalary  这样我就对表AddSalary申明了一个游标mycursor   【高级备注】  DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSORFOR<SELECT语句>  这里我说一下游标中级应用中的[INSENSITIVE]和[SCROLL]  INSENSITIVE  表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过游标来更新基本表。如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。  另外应该指出,当遇到以下情况发生时,游标将自动设定INSENSITIVE 选项。  a.在SELECT 语句中使用DISTINCT、 GROUP BY、 HAVING UNION 语句;  b.使用OUTER JOIN;  c.所选取的任意表没有索引;  d.将实数值当作选取的列。  SCROLL  表明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。如果不使用该保留字,那么只能进行NEXT 提取操作。由此可见,SCROLL 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再  重开游标。<a style="color:transparent">来源gao($daima.com搞@代@#码网</a>   1.3.2 打开游标  非常简单,我们就打开刚才我们声明的游标mycursor  OPEN mycursor   1.3.3读取数据  FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游标名  | @游标变量名 } [ INTO @变量名 [,…] ]  参数说明:  NEXT   取下一行的数据,并把下一行作为当前行(递增)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次执行FETCH NEXT操作将取得游标集中的第1行数据。NEXT为默认的游标提取选项。  INTO @变量名[,…]  把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。  现在我们就取出mycursor游标的数据吧!   当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1行。就本例而言,可以使用下列操作读取第1行数据:  Eg: Fetch next from mycursor 或则 Fetch first from mycursor  这样我就取出了游标里的数据,但是光光这样可不够,我们还需要将取出的数据赋给变量  --声明2个变量  declare @O_ID NVARCHAR(20)  declare @A_Salary float  --将取出的值传入刚才声明的2个变量  Fetch next from mycursor into @ O_ID,@ A_Salary     1.3.4关闭游标  CLOSE mycursor                1.3.5删除游标  DEALLOCATE mycursor              1.3.6 实例训练  **/  CREATE PROCEDURE PK_Test  AS      --声明2个变量      declare @O_ID nvarchar(20)        declare @A_Salary float        --声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同      declare mycursor cursor for select O_ID,A_Salary from AddSalary        --打开游标      open mycursor          --从游标里取出数据赋值到我们刚才声明的2个变量中      fetch next from mycursor into @O_ID,@A_Salary          --判断游标的状态      -- 0 fetch语句成功          ---1 fetch语句失败或此行不在结果集中          ---2 被提取的行不存在      while (@@fetch_status=0)      begin          --显示出我们每次用游标取出的值         print '游标成功取出一条数据'         print @O_ID         print @A_Salary         --用游标去取下一条记录         fetch next from mycursor into @O_ID,@A_Salary      end      --关闭游标      close mycursor      --撤销游标      DEALLOCATE mycursor   GO

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:sqlserver游标使用和循环
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址