更新时间:2023-09-24 01:01:15
你们好,最近小艾特发现有诸多的小伙伴们对于游标卡尺使用方法和读数方法图解,游标这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 定义一个游标
2、 在T-SQL中,定义a游标可以非常简单,也可以相对复杂,具体取决于游标的参数。游标的参数设置取决于你对游标原理的理解。
3、 游标实际上可以理解为定义在特定数据集上的指针。我们可以控制这个指针遍历数据集或者只指向特定的行,所以游标是在以Select:
4、 在MSDN,T-SQL中游标的定义如下:
5、 看起来很头疼,不是吗?再来说说怎么仔细定义游标:
6、 游标分为游标类型和游标变量。对于游标变量,遵循T-SQL变量的定义方法(什么,
7、 不知道T-SQL变量定义的规则?参考我之前的博文)。游标变量以两种方式支持赋值,定义时赋值和定义后赋值。定义游标变量的定义和其他局部变量一样。
8、 在游标前加“@”。注意,如果定义全局游标,只能在定义时直接赋值,不能在游标的名称前加“@”。这两个定义如下:
9、 让我们看看游标中定义的参数:
10、 在本地和全局之间选择
11、 局部意味着游标的生命周期仅在批处理或函数或存储过程中可见,而全局意味着游标作为特定连接的上下文全局有效,例如:
12、 Forward and roll up only.
13、 FORWARD_ONLY表示游标只能从数据集的开头读到数据集的结尾,FETCH NEXT是唯一的选项,SCROLL支持游标可以在定义的数据集中任意方向读取。
14、 或者任何位置,如下图所示:
15、 Static key set dynamic and fast forward one of four choices
16、 这四个关键词是游标数据集反映的表内数据与游标读取的数据之间的关系。
17、 静态意味着当游标建立时,FOR之后的SELECT语句中包含的数据集的副本将被创建并存储在tempdb数据库中。
18、 对基础表中数据的任何更改都不会影响游标的内容。
19、 动态是与静态完全相反的选择。当底层数据库发生变化时,游标的内容也会得到反映,数据内容会在下次取数时发生变化。
20、 键集可以理解为静态和动态的折衷。存储结果集的唯一主键,其中游标位于tempdb中。当结果集中的任何一行被更改或删除时,
21、 @@FETCH_STATUS将为-2,而-2,KEYSET无法检测新添加的数据。
22、 FAST_FORWARD可以理解为FORWARD_ONLY的优化版本。FORWARD _只执行静态计划,FAST_FORWARD根据情况选择采用动态计划还是静态计划。
23、 在大多数情况下,FAST_FORWARD比FORWARD_ONLY的性能稍好。
24、 READ _ ONLY scroll _ locks optimal READ _ ONLY是指声明的游标只能读取数据,游标不能做任何更新操作。
25、 SCROLL_LOCKS是另一个极端,它锁定所有读入的数据游标,防止其他程序进行修改,从而保证更新的绝对成功。
26、 最优性是相对较好的选择。优化不会锁定任何数据。游标中需要更新数据时,如果更新了底层表数据,游标中的数据更新不成功。如果,
27、 如果底部表格数据没有更新,游标中的表格数据可以更新。
28、 开放电话游标
29、 定义完游标,游标需要打开使用,只有一行代码:
30、 OPEN test_Cursor
31、 注意,当全局游标和局部游标变量同名时,默认情况下将打开局部变量游标。
32、 用途游标
33、 游标的使用分为两部分,一部分是操作:数据集中的游标点,另一部分是操作游标所指行的部分或全部内容。
34、 只支持六种移动选项,分别是去第一行(FIRST)、最后一行(LAST)、下一行(NEXT)和上一行(PRIOR),直接跳到某一行(ABSOLUTE(n)),与当前跳几行(RELATIVE(n))相比,例如:
35、 对于未指定滚动选项的游标,仅支持下一个值。
36、 第一步完成后,这一行的值通过INTO关键字传递给局部变量:
37、 比如下面代码:
38、 游标经常会和全局变量@@FETCH_STATUS与WHILE循环来共同使用,以达到遍历游标所在数据集的目的,例如:
39、 关闭游标
40、 在游标使用完之后,一定要记得关闭,只需要一行代码:CLOSE+游标名称
41、 CLOSE test_Cursor
42、 释放游标
43、 当游标不再需要被使用后,释放游标,只需要一行代码:DEALLOCATE+游标名称
44、 DEALLOCATE test_Cursor
以上就是游标这篇文章的一些介绍,希望对大家有所帮助。