当前位置:首页 > 芯闻号 > 充电吧
[导读]----游标   从某一结果集中逐一的取出数据--------游标分类:Transact-SQL游标,API游标,客户游标----游标的生命周期:声明游标,打开游标,读取游标数据,关闭游标,释放游标-


----游标   从某一结果集中逐一的取出数据----
----游标分类:Transact-SQL游标,API游标,客户游标

----游标的生命周期:声明游标,打开游标,读取游标数据,关闭游标,释放游标


----1. 声明游标:是为游标指定获取数据时所使用的Select语句,声明游标并不会检索任何数据
----Declare 游标名称 Cursor 参数

 DECLARE cursor_name CURSOR
 [LOCAL | GLOBAL]
 [FORWARD_ONLY | SCROLL]
 [STATIC | KEYSET | DYNAMIC]
 [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]
 FOR select_statement
 [FOR {READ ONLY | UPDATE ][OF column_list]}]


----INSENSITIVE关键字指明要为检索到的结果集建立一个临时拷贝,以后的数据从这个临时拷贝中获取。如果在后来游标处理的过程中,原有基表中数据发生了改变,那么它们对于该游标而言是不可见的。这种不敏感的游标不允许数据更改。

----SCROLL关键字指明游标可以在任意方向上滚动。所有的fetch选项(first、last、next、relative、absolute)都可以在游标中使用。如果忽略该选项,则游标只能向前滚动(next)。

----Select_statement指明SQL语句建立的结果集。Transact SQL语句COMPUTE、COMPUTE BY、FOR BROWSE和INTO在游标声明的选择语句中不允许使用。

----READ ONLY指明在游标结果集中不允许进行数据修改。
----UPDATE关键字指明游标的结果集可以修改。
----OF column_list指明结果集中可以进行修改的列。缺省情况下(使用UPDATE关键字),所有的列都可进行修改。
----LOCAL关键字指明游标是局部的,它只能在它所声明的过程中使用。
----GLOBAL关键字使得游标对于整个连接全局可见。全局的游标在连接激活的任何时候都是可用的。只有当连接结束时,游标才不再可用。
----FORWARD_ONLY指明游标只能向前滚动。
----STATIC的游标与INSENSITIVE的游标是相同的。
----KEYSET指明选取的行的顺序。SQL Server将从结果集中创建一个临时关键字集。如果对数据库的非关键字列进行了修改,则它们对游标是可见的。因为是固定的关键字集合,所以对关键字列进行修改或新插入列是不可见的。
----DYNAMIC指明游标将反映所有对结果集的修改。
----SCROLL_LOCK是为了保证游标操作的成功,而对修改或删除加锁。
----OPTIMISTIC指明哪些通过游标进行的修改或者删除将不会成功。


----标准游标
 Declare MyCursor Cursor
  for Select * from AccountInfo


----只读游标
 Declare MyCursor Cursor
  for Select * from AccountInfo
  for Read Only


----可更新游标
 Declare MyCursor Cursor
  for Select * from AccountInfo
  for update
 


----2. 打开游标:使用Open语句打开Transaction-SQL服务器游标,执行Open语句的过程就是按照Select语句惊醒填充数据
----打开游标以后游标位置在第一行
 Open MyCursor
 


----3. 读取游标数据:在打开游标以后,使用Fetch语句从Transaction-SQL服务器游标中检索特定的一行,使用Fetch
----操作可以使游标移动到下一条记录,并将游标返回的每个列的数据分别赋值给声明的本地变量
 Fetch [Next|Prior|First|Last|Absolute n|Relative n ] from MyCursor
 into @accountID,@name,@type,@money,@state


----NEXT指明从当前行的下一行取值,若第一次取值则返回第一行。默认读取选项为Next
----PRIOR指明从当前行的前一行取值。
----FIRST是结果集的第一行。
----LAST是结果集的最后一行。
----ABSOLUTE n表示结果集中的第n行,该行数同样可以通过一个局部变量传播。若n为正数,则返回从游标标头开始的第n行,
----并将返回行作为新的当前行;若n为负数,则返回从游标末尾开始的第n行,并将返回行作为新的当前行;如果n为0,则返回当前行。
----RELATIVE n表示要取出的行在当前行的前n行或后n行的位置上。如果该值为正数,则要取出的行在当前行前n行的位置上,
----如果该值为负数,则返回当前行的后n行。
----INTO @cursor_variable_name表示游标列值存储的地方的变量列表。该列表中的变量数应该与DECLARE语句中选择语句
----所使用的变量数相同。变量的数据类型也应该与被选择列的数据类型相同。直到下一次使用FETCH语句之前,变量中的
----值都会一直保持。
----每一次FETCH的执行都存储在系统变量@@fetch_status中。如果FETCH成功,则@@fetch_status被设置成0。
----@@fetch_status为-1表示已经到达了结果集的一部分(例如,在游标被打开之后,基表中的行被删除)。
----@@fetch_status可以用来构造游标处理的循环。



----4. 关闭游标:
 Close MyCursor



----5. 释放游标:
Deallocate MyCursor


----游标使用小例子
declare @ID varchar(20);
declare @name nvarchar(20);
declare @type nvarchar(20);
declare @money nvarchar(20);
declare @state nvarchar(20);
Declare MyCursor Cursor scroll
 for Select * from AccountInfo
open MyCursor
Fetch Next from MyCursor
 into @ID,@name,@type,@money,@state
 
while(@@Fetch_Status=0)
 begin
  --begin
  print @ID+', '+@name+', '+@type+', '+@money+', '+@state
  --end
  Fetch Next from MyCursor
  into @ID,@name,@type,@money,@state
 end

close MyCursor
Deallocate MyCursor


----结果:1, Eva, RMB, 5000.00, Active
----      2, Eva, Dollor, 2000.00, Active

----修改当前游标的数据
Update AccountInfo(tablename) set accountName='Jack'(columnname) Where current of MyCursor


----修改当前游标的数据
Delete from AccountInfo(tablename) Where current of MyCursor

Select @@cursor_rows  ----可以得到当前游标中存在的数据行数


----此变量为一个连接上的全局变量,因此只对应最后一次打开的游标

----参考文章: http://www.cnitblog.com/ffan/archive/2005/10/13/3276.aspx

Be the change you want to see in the world.






本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京——2024年5月13日 亚马逊云科技游戏行业专属解决方案和全托管无服务器架构助力上海所思互动信息科技有限责任公司(以下简称“所思科技”),成功打造爆款游戏《Party Animals》(中文名称《猛兽派对》)。亚马...

关键字: 服务器 数据库

科睿唯安《全球创新Top100》以该公司拥有的专利数据库为基础,根据“成功率”、“地域投资”、“影响力”、“稀缺性”四个评价维度对知识产权进行分析,评选出全球百强创新企业和机构。该评选从2012年开始每年实施一次,202...

关键字: 数据库 5G 人工智能

北京——2024年2月26日 日前,领先的IT市场研究和咨询公司IDC发布《IDC MarketScape:全球云计算和以应用为中心的市场供应商评估》1报告,亚马逊位列“领导者”类别。报告指出,“亚马逊云科技Market...

关键字: 云计算 数据库 存储

北京——2023年12月27日 在2023亚马逊云科技re:Invent全球大会上,亚马逊云科技表彰了在过去一年中,利用亚马逊云科技的技术和服务在推动客户创新及解决方案构建方面做出杰出贡献的卓越合作伙伴。8家亚马逊云科技...

关键字: 数智化转型 机器学习 数据库

北京——2023年12月7日 亚马逊云科技在2023 re:Invent全球大会上,宣布推出三项新的无服务器服务创新,涵盖了数据库和分析领域,使客户能够更快速、更轻松地扩展他们的数据基础设施,以支持最具挑战性的应用场景。...

关键字: 服务器 人工智能 数据库

北京——2023年12月4日 亚马逊云科技在2023 re:Invent全球大会上,宣布推出一系列新的集成解决方案,旨在帮助客户迅速而轻松地连接和分析数据,而无需构建和管理复杂的提取、转换和加载(ETL)数据管道。通过全...

关键字: 数据存储 数据库 人工智能

北京——2023年11月13日 亚马逊云科技携手凯捷(Capgemini)中国共同发布《汽车行业可持续发展白皮书》(以下简称《白皮书》),并助力凯捷中国推出碳排放管理平台,致力于以数智化方式帮助车企解决在实践可持续发展过...

关键字: 数据库 机器学习 电动汽车

11月1日,由开放原子开源基金会主办,电子科技大学承办,深圳市腾讯计算机系统有限公司提供战略合作支持的2023年开放原子校源行(成都站)活动在电子科技大学圆满举行。本次活动以“聚缘于校,开源共行”为主题,将四川省在信息技...

关键字: 开源模式 操作系统 数据库

11月1日,2023杭州云栖大会上,阿里云瑶池数据库宣布已全面实现Serverless化,并接入通义等大模型能力,大幅提升数据库一站式及智能化水平。同时,PolarDB Always On系列推出3大重磅升级,首个数据智...

关键字: Serverless AI 阿里云 数据库

北京2023年9月8日 /美通社/ -- 日前,"云融数智 创领未来"2023浪潮云海云图生态峰会产品技术伙伴专场在北京成功举办。来自开源基金会、云安全、PaaS、数据库服务、容灾备份等领域的头部领先...

关键字: 云安全 私有云 数据库 NI
关闭
关闭