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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

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

精品课程

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

共24课时 | 7.6万人学习

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

共0课时 | 0人学习

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

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