T-SQL游标的使用

一.建表

INSERT INTO cloud VALUES( '你' )
INSERT INTO cloud VALUES( '一会看我' )
INSERT INTO cloud VALUES( '一会看云' )
INSERT INTO cloud VALUES( '我觉得' )
INSERT INTO cloud VALUES( '你看我时很远' )
INSERT INTO cloud VALUES( '你看云时很近' )

二.建立游标

1.游标的一般格式
DECLARE 游标名称 CURSOR 
FOR 
SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游标名称
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
WHILE @@FETCH_STATUS=0
   BEGIN
      SQL语句
      FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
    END
CLOSE 游标名称
DEALLOCATE 游标名称 (释放游标)

cursor:表示在光标当前位置执行操作

2.实例:

DECLARE
@v_line varchar(50)                     ---------声明一个装载语句的字符串
DECLARE cursor_cloud CURSOR
FOR
SELECT linetext from cloud;
BEGIN 
OPEN cursor_cloud;                       -------打开游标
FETCH NEXT FROM cursor_cloud INTO @v_line-------将游标移向下一行,把获取的内容放入@V_line
WHILE @@FETCH_STATUS = 0                 -------检测是否成功获取数据
BEGIN
PRINT @v_line                            -------进行SQL语句操作
FETCH NEXT FROM cursor_cloud INTO @v_line-------向下移行
END
CLOSE cursor_cloud;                      -------关闭游标
DEALLOCATE cursor_cloud;                 -------释放游标
END;

结果得:

三.使用游标修改数据(update)

DECLARE
 @v_line varchar(50),
 @i int
 DECLARE cursor_cloud CURSOR
 FOR
 SELECT linetext from cloud;
BEGIN
 SET @i = 0;
 OPEN cursor_cloud;
 FETCH NEXT FROM cursor_cloud INTO @v_line
 WHILE @@FETCH_STATUS = 0
 BEGIN
 SET @i = @i + 1;
 UPDATE cloud SET linetext = CAST(@i as varchar(5)) + ' ' + @v_line WHERE linetext =
@v_line;
 FETCH NEXT FROM cursor_cloud INTO @v_line 
 END
 CLOSE cursor_cloud;
 DEALLOCATE cursor_cloud;
END;

结果得:

四.可灵活移动的游标

DECLARE
 @v_line varchar(50)
 DECLARE cursor_cloud CURSOR SCROLL
 FOR
 SELECT linetext from cloud;
BEGIN
 OPEN cursor_cloud;
 FETCH FIRST FROM cursor_cloud INTO @v_line
 PRINT '第一行 ' + @v_line
 FETCH NEXT FROM cursor_cloud INTO @v_line
 PRINT '第一行的下一行 ' + @v_line
 FETCH LAST FROM cursor_cloud INTO @v_line
 PRINT '最后一行 ' + @v_line
 FETCH PRIOR FROM cursor_cloud INTO @v_line
 PRINT '最后一行的前一行 ' + @v_line
 CLOSE cursor_cloud;
 DEALLOCATE cursor_cloud;
END;

 结果得

五.可更新的游标

DECLARE
 @v_line varchar(50),
 @i int
 DECLARE cursor_cloud CURSOR
 FOR
 SELECT linetext from cloud for update;
BEGIN
 DECLARE @v_new_line varchar(50);
 SET @i = 0;
 OPEN cursor_cloud;
 FETCH NEXT FROM cursor_cloud INTO @v_line
 WHILE @@FETCH_STATUS = 0
 BEGIN
 set @v_new_line = SUBSTRING( @v_line, 2,100 );
 UPDATE cloud SET linetext = @v_new_line WHERE CURRENT OF cursor_cloud;
 FETCH NEXT FROM cursor_cloud INTO @v_line 
 END
 CLOSE cursor_cloud;
 DEALLOCATE cursor_cloud;
END;

 通过update...........where current of进行游标的更新

 UPDATE cloud SET linetext = @v_new_line WHERE CURRENT OF cursor_cloud;

表示更新最后一个fetch命令从cursor_cloud游标获得的行 

where current of不仅能结合update操作,也能结合delete进行操作

delete from cloud
WHERE CURRENT OF cursor_clould;

表示删除最后一个fetch命令从cursor_cloud游标获得的行

注:

嵌入式SQL UPDATEDELETE可以使用WHERE子句(不带游标)或WHERE CURRENT OF(带声明游标),但不能同时使用两者。
如果指定的UPDATEDELETE既不带WHERE也不带WHERE CURRENT OF,则会更新或删除表中的所有记录。

更新的限制
当使用WHERE CURRENT OF子句时,不能使用当前字段值更新字段以生成更新的值。
例如,SET Salary=Salary+200或SET Name=UPPER(Name):将字段的字母全部变成大写
尝试这样做会导致

SQLCODE -69错误:SET <field> = <value expression> not allowed with WHERE CURRENT OF <cursor>。
————————————————

原文链接:https://blog.csdn.net/yaoxin521123/article/details/121602006

练习:

插入表如下


insert into words2 values(1,'你最可爱')
insert into words2 values(2,'我说时来不及思索')
insert into words2 values(3,'而思索过后')
insert into words2 values(4,'还是会这么说')

 
      (1)

declare
 @num int,@linetext varchar(100)
 declare cursor_words cursor scroll
 for
 select linetext from words2
 set @num=1
 open cursor_words
 fetch next from  cursor_words into @linetext
 while @@FETCH_STATUS=0
 begin
 print '普希金说的第'+cast(@num as varchar(10))+'句话:'+@linetext
 fetch next from cursor_words into @linetext
 set @num = @num+1
 end
 print ' '
 print'他一共说了'+cast(@num-1 as varchar(10))+'句话'
 close cursor_words
 deallocate cursor_words

(2) 在奇数行后面加逗号,偶数行后面加句号

 declare 
 @i int,@linetext varchar(100)
 declare  cursor_words cursor 
 for
 select linetext from words2
 begin
 set @i=0
 open cursor_words;
 fetch next from cursor_words into @linetext 
 while @@FETCH_STATUS=0
 begin 
 set @i=@i+1
 if(@i%2=1)
 update words2
 set linetext=@linetext+',' where linenum=@i
 else
 update words2  
 set linetext=@linetext+'。' where linenum=@i
 fetch next from cursor_words into @linetext
 end
 close cursor_words
 deallocate cursor_words
 end

再用

 select * from words2

得到

(3)将奇数行和偶数行合并在一起,同时调整相应的行号

重点:where current of

 declare @num int,@linetext varchar(50),@newline varchar(100)
 declare cursor_words2 cursor
 for
 select linetext from words2 for update;-----手工加锁语句
 set @num = 1
 set @newline = ''
 open cursor_words2
 fetch next from cursor_words2 into @linetext
 while @@FETCH_STATUS=0
 begin
set @newline=@newline+@linetext
if @num%2=1
delete from words2 WHERE CURRENT OF cursor_words2----------删除奇数行
else
begin
update words2 set linetext=@newline,linenum=@num/2 WHERE CURRENT OF cursor_words2-----------修改行号
set @newline=''
end
fetch next from cursor_words2 into @linetext
set @num = @num +1
end
close cursor_words2
deallocate cursor_words2

 再用

select *from words2

得到

 其中的加锁语句可以阅读这篇:

http://t.csdn.cn/Hox1D

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18824.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

判断大小端的错误做法

这里不详细讲解大小端的区别&#xff0c;只讲解判断大小端的方法。 1.大端&#xff0c;小端的区别 0x123456 在内存中的存储方式 大端是高字节存放到内存的低地址 小端是高字节存放到内存的高地址 2.大小端的判断 1.错误的做法 int main() {int a0x1234;char c(char)a;if(…

2022年宜昌市网络搭建与应用竞赛样题(三)

网络搭建与应用竞赛样题&#xff08;三&#xff09; 技能要求 &#xff08;总分1000分&#xff09; 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;网络搭建及安全部署项目&#xff08;500分&#xff0…

基于SpringBoot3从零配置SpringDoc

为了方便调试&#xff0c;更好的服务于前后端分离式的工作模式&#xff0c;我们给项目引入Swagger。 系列文章指路&#x1f449; 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 文章目录 1. SpringFox2. SpringDoc2.1 引入依赖2.2 配置文件2.3 语法2.4 使…

PCL学习八:Keypoints-关键点

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 PCL点云库学习笔记&#xff08;文章链接汇总&#xff09; 1. 引言 关键点也称为兴趣点&#xff0c;它是 2D 图像或 3D 点云或曲面模型上,可以通过检测标准来获取的具有稳定性、区别性的点集。从技术上来说&#xff0c;关键…

Microsoft Edge新功能测评体验

Microsoft Edge使用体验 Microsoft Edge是一款现代化的浏览器&#xff0c;它拥有众多功能和强大的性能&#xff0c;为用户带来更加流畅的浏览体验。 Edge最近推出了分屏功能&#xff0c;支持一个窗口同时显示两个选项卡&#xff0c;这可以大大提高生产力和多任务处理能力。 一…

API接口对程序员的帮助有哪些,参考值简要说明

API接口对程序员的帮助有哪些 提高开发效率&#xff1a;通过API接口&#xff0c;程序员能够在不用重复编写代码的情况下&#xff0c;直接获取其他应用程序提供的服务或数据&#xff0c;极大地提高了开发效率。 减少错误率&#xff1a;使用API接口可以避免手动输入数据容易出现…

洛谷P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II(离线区间逆序对+莫队二次离线)

题目 给你一个长为n(1<n<1e5)的序列a(0<ai<1e9)&#xff0c; m(1<m<1e5)次询问&#xff0c;每次查询一个区间[l,r]的逆序对数&#xff0c;可离线。 思路来源 登录 - 洛谷 三道经典分块题的更优复杂度解法&[Ynoi2019模拟赛]题解 - 博客 - OldDriverT…

Flutter性能分析工具使用

使用前提 flutter常用的性能分析工具&#xff0c;这些工具都集成在android studio中&#xff0c;基本能满足我们的需求了。在下面介绍的几个工具中&#xff0c;Flutter Performance和Flutter Inspector都能够直接在debug模式下使用&#xff0c;但是DevTools只能在profile模式下…

typescript:熟练掌握typescript

一、简介 TypeScript 教程 | 菜鸟教程 TypeScript (简称:TS)是JavaScript的超集 (JS有的TS 都有)。 TypeScriptType JavaScript (在JS 基础之上&#xff0c;为JS添加了类型支持)。 哔哩哔哩_教程_TypeScript 二、TypeScript为什么要为js增加类型支持&#xff1f; 背景&am…

4年外包出来,5次面试全挂....

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;毕业于普通二本院校非计算机专业&#xff0c;18年跨专业入行测试&#xff0c;第一份工作在湖南某软件公司&#xff0c;做了接近4年的外包测试工程师&#xff0c;今年年初&#xff0c;感觉自己不能够再这样下去了&…

鲲鹏展翅 信安高飞 | 鲲鹏开发者峰会2023-麒麟信安技术论坛成功举办!

2023年5月6日-7日&#xff0c;以“创未来 享非凡”为主题的鲲鹏开发者峰会2023在东莞松山湖举办。鲲鹏产业生态繁荣&#xff0c;稳步发展&#xff0c;正在成为行业核心场景及科研领域首选&#xff0c;加速推动数字化转型。 作为鲲鹏生态重要合作伙伴&#xff0c;麒麟信安受邀举…

Notion Ai中文指令使用技巧

Notion AI 是一种智能技术&#xff0c;可以自动处理大量数据&#xff0c;并从中提取有用的信息。它能够 智能搜索&#xff1a;通过搜索文本和查询结果进行快速访问 自动归档&#xff1a;可以根据关键字和日期自动将内容归档 内容分类&#xff1a;可以根据内容的标签和内容的…

交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT

Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域&#xff0c;Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通…

基于JavaWeb实现的汽车维修管理系统

【简介】 本系统基于springboot mybatis jps架构开发&#xff0c;前后端分离&#xff0c;开发环境为jdk1.8、mysql、maven。系统功能主要分为汽车维修管理、配件管理、财务管理、基础数据管理、系统维护5大模块。 【功能结构】 【技术架构】 系统架构&#xff1a;springboot …

深度学习第J6周:ResNeXt-50实战解析

目录 一、模型结构介绍 二、前期准备 三、模型 三、训练运行 3.1训练 3.2指定图片进行预测 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] &#x1f4cc; …

移动端异构运算技术 - GPU OpenCL 编程(基础篇)

一、前言 随着移动端芯片性能的不断提升&#xff0c;在移动端上实时进行计算机图形学、深度学习模型推理等计算密集型任务不再是一个奢望。在移动端设备上&#xff0c;GPU 凭借其优秀的浮点运算性能&#xff0c;以及良好的 API 兼容性&#xff0c;成为移动端异构计算中非常重要…

Echarts使用本地JSON文件加载不出图表的解决方法以及Jquery访问本地JSON文件跨域的解决方法

前言 最近需要做一个大屏展示&#xff0c;需要用原生html5cssjs来写&#xff0c;所以去学了一下echarts的使用。在使用的过程中难免碰到许多BUG&#xff0c;百度那是必不可少的&#xff0c;可是这些人写的牛头不对马嘴&#xff0c;简直是标题党一大堆&#xff0c;令我作呕&…

fastjson 代码执行 (CNVD-2017-02833)

漏洞存在原因 在fastjson<1.2.24版本中&#xff0c;在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。而在1.24<fastjson<1.2.48版本中后增加了反序列化白名单。 漏洞复现过程如下 在vulfocu…

龙的画法图片

由龙老师画素描中国龙的方法,大概可以遵循以下步骤: 确定龙的姿态和比例:在纸上简单地画出龙的基本形状和姿态,包括身体的长度,颈部、腿和尾巴的位置和比例关系。 添加细节:在基本形状的基础上,开始添加一些细节,如龙的头部、眼睛、鼻子、嘴巴、爪子等。注意要保持姿态和比例…

UU跑腿“跑男失联”:同城即配服务赛道商业逆袭难?

五一假期&#xff0c;人们纷纷走出家门&#xff0c;要么扎堆奔向“远方”&#xff0c;要么、享受本地烟火气息。 据文化和旅游部数据中心测算&#xff0c;劳动节假期&#xff0c;全国国内旅游出游合计2.74亿人次&#xff0c;同比增长70.83%。 五一假日的郑州东站 面对人山人海…