SQL Server中的游标怎么定义和使用


这篇文章主要介绍“SQLServer中的游标怎么定义和使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQLServer中的游标怎么定义和使用”文章能免费云主机域名帮助大家解决问题。游标是面向行的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能。在性能上,游标会吃更多的内存,减少可用的并发,占用带宽,锁定资源,当然还有更多的代码量。用一个比喻来说明为什么游标会占用更多的资源。当你从ATM机取款的时候,是一次取1000的效率更高呢,还是10次100呢?游标是非常邪恶的一种存在,使用游标经常会比使用面向集合的方法慢2-3倍,当游标定义在大数据量时,这个比例还会增加。如果可能,尽量使用while,子查询,临时表,函数,表变量等来替代游标,记住,游标永远只是你最后无奈之下的选择,而不是首选。既然游标那么多缺点,为什么要学习游标呢?现存系统有一些游标,我们查询必须通过游标来实现。作用一个备用方式,当使用while、子查询,临时表,表变量,自建函数或其他方式仍然无法实现某些查询的时候,可以使用游标实现。游标的定义语法:在T-SQL中,定义一个游标可以使非常简单,也可以相对复杂,这主要取决于游标的参数。而游标的参数设置取决于你对游标原理的了解程度。
游标其实可以理解成一个定义在特定数据集上的指针,我们可以控制这个指针遍历数据集,或者仅仅是指向特定的行,所以游标是定义在以SELECT开始的数据集上的。游标分为游标类型和游标变量。游标变量支持两种方式赋值,定义时赋值和先定义后赋值,定义游标变量像定义其他局部变量一样,在游标前加”@”。注意,如果定义全局的游标,只支持定义时直接赋值,并且不能在游标名称前面加“@”。两种定义方式如下:参数解释:如果不指定游标作用域,默认作用域为GLOBAL。FORWARD_ONLY意味着游标只能从数据集开始向数据集结束的方向读取,FETCH NEXT是唯一的选项。默认为Forward_Only。SCROLL支持游标在定义的数据集中向任何方向,或任何位置移动。这四个关键字是游标所在数据集所反映的表数据和游标读取出数据的关系STATIC:当游标被建立时,将会创建FOR后面的SELECT语句所包含数据集的副本存入tempdb数据库中,任何对于底层表内数据的更改不会影响到游标内容。DYNAMIC:和STATIC完全相反的选项,当底层数据库更改时,游标的内容也会随之得到反映,在下一次fecth中,数据内容会随之更改。KEYSET:可以理解为介于STATIC和DYNAMIC的折中方案,将游标所在结果集的唯一能确定每一行的主键存入tempdb,当结果集中任何行改变或者删除时,@@FETCH_STATUS会为-2,KEYSET无法探测新加入的数据。FAST_FORWARD:可以理解为FORWARD_ONLY的优化版本。FORWARD_ONLY执行的是静态计划,而FAST_FORWARD是根据情况进行选择采用动态计划还是静态计划,大多数情况下FAST_FORWARD要比FORWARD_ONLY性能略好。READ_ONLY:意味着声明的游标只能读取数据,游标不能做任何更新操作 。SCROLL_LOCKS:是另一种极端,将读入游标的所有数据进行锁定,防止其他程序进行更改,以确保更新的绝对成功。OPTIMISTIC:相对比较好的一个选择,OPTIMISTIC不锁定任何数据,当需要在游标中更新数据时,如果底层表数据更新,则游标内数据更新不成功,如果,底层表数据未更新,则游标内表数据可以更新。当定义完游标后,游标需要打开后使用,只需一行代码便可打开游标:注意,当全局游标和局部游标变量重名时,默认会打开局部变量游标。游标的使用分为两部分,一部分是操作游标在数据集内的指向,另一部分是将游标所指向的行的部分或全部内容进行操作。
支持6种移动导航,分别为:第一行(FIRST)最后一行(LAST)下一行(NEXT)上一行(PRIOR)直接跳到某行(ABSOLUTE(n))相对于目前跳几行(RELATIVE(n))例如:对于未指定SCROLL选项的游标来说(未指定,则是只进游标),只支持NEXT取值。游标经常会和全局变量@@FETCH_STATUS与WHILE循环来共同使用,以达到遍历游标所在数据集的目的。当执行一条Fetch语句之后,@@Fetch_Status可能出现3种值:0,Fetch语句成功。-1:Fetch语句失败或行不在结果集中。-2:提取的行不存在。游标总记录数 @@CURSOR_ROWS例如:游标修改当前行数据语法:游标删除当前数行据语法:举例:在游标使用完之后,一定要记得关闭,只需要一行代码:CLOSE+游标名称当游标不再需要被使用后,释放游标,只需要一行代码:DEALLOCATE+游标名称如果能不用游标,尽量不要使用游标用完之后一定要关闭和释放尽量不要在大量数据上定义游标尽量不要使用游标上更新数据尽量不要使用insensitive, static和keyset这些参数定义游标如果可以,尽量使用FAST_FORWARD关键字定义游标如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数关于“SQLServer中的游标怎么定义和使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: Python如何实现可可爱爱的小粽子

本文小编为大家详细介绍“Python如何实现可可爱爱的小粽子”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现可可爱爱的小粽子”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先是建立一个粽子对象,也就是一个精灵,类里…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/06 09:37
Next 05/06 09:37

相关推荐