0

0

sqlserver游标使用和循环

高洛峰

高洛峰

发布时间:2016-12-14 11:34:15

|

1579人浏览过

|

来源于php中文网

原创

/***  
游标的使用  
 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱。  
 使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。  
1.3.1声明游标  
最简单游标声明:DECLARE <游标名>CURSOR FOR;  
其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询  
例子:[已表2 AddSalary为例子]  
Declare mycursor cursor for select * from AddSalary  
这样我就对表AddSalary申明了一个游标mycursor   
【高级备注】  
DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSORFOR  
这里我说一下游标中级应用中的[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 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再  
重开游标。   
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

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
布尔教育燕十八mysql高级视频教程
布尔教育燕十八mysql高级视频教程

共24课时 | 7.5万人学习

Go 中文开发手册
Go 中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号