当前位置:首页 > > 充电吧
[导读]----游标   从某一结果集中逐一的取出数据--------游标分类: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.






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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭