快捷搜索:
来自 网络数据库 2019-10-06 22:31 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

基础知识梳理

游标的语法

  • 是拍卖数据的一种格局。
  • 它能够牢固到结果聚焦的某一行,对数码举办读写。
  • 也能够运动游标定位到你要求的行中举办数据操作。
  • 是面向集合的数据库管理种类和面向行的程序设计之间的大桥

结果集,结果集即是select查询未来重临的具备行数据的汇集。

@@fetch_status是MicroSoft SQL SE奥迪Q5VELX570的叁个全局变量
其值有以下二种,分别表示三种不一样含义[再次来到类型integer]
0 FETCH 语句成功
-1 FETCH 语句失利或此行不在结果聚焦
-2 被提取的行不设有

举例能不要游标,尽量不要采用游标

Fetch [ [Next|prior|Frist|Last|Absoute n|Relative n ]
from
[Global] cursor_name
into @variable_name[,....]]
参数表明:
Frist:结果集的首先行
Prior:当前任务的上一行
Next:当前岗位的下一行
Last:最后一行
Absoute n:从游标的首先行开头数,第n行。
Relative n:从相对当前地方数,第n行。(n为负数向前数,不然向后)
Into @variable_name[,...] : 将提取到的数目寄存到变量variable_name中。
介意:    对于未钦赐SCROLL选项的游标来讲,只补助NEXT取值.

 

始建游标

实战创建游标

--定义后直接赋值
DECLARE test_Cursor CURSOR LOCAL FOR
SELECT * FROM TABLE1
DECLARE test_Cursor2 CURSOR GLOBAL FOR
SELECT * FROM TABLE2
--用GO结束上边成效域
GO
--展开游标
OPEN test_Cursor
OPEN test_Cursor2
大局游标在批管理终结后依旧有效
一部分游标在批管理终结后被隐式释放,不可能再别的批处理中援用
  假使不点名游标成效域,暗许效能域为GLOBAL
 注意,当全局游标和一些游标变量重名时,私下认可会张开局地变量游标

实行结果

游标的定义

图片 1

游标的归类

DECLARE cursor_name CURSOR [ LOCAL |GLOBAL ] 
     [ FORWARD_ONLY | SCROLL ] 
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
     [ TYPE_WARNING ] 
     FOR select_statement 
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]

领到游标语法 

尽心竭力不要在大气数据上定义游标
尽心尽力不要采纳游标上更新数据
尽可能不要选拔insensitive, static和keyset那些参数定义游标
要是能够,尽量接纳FAST_FOENVISIONWA帕杰罗D关键字定义游标
比如只对数据开展读取,当读取时只用到FETCH NEXT选项,则最佳利用FOLacrosseWARubiconD_ONLY参数

游标变量协理二种办法赋值,定义时赋值和先定义后赋值,定义游标变量像定义其余部分变量同样,在游标前加”@”,注意,借使定义全局的游标,只帮衬定义时直接赋值,而且不能够在游标名称前边加“@”,三种概念形式如下:
--定义后从来赋值
DECLARE test_Cursor CURSOR FOR
SELECT * FROM TABLE1
--先定义后赋值
DECLARE @test_Cursor2 CURSOR
SET @test_Cursor2=CURSOR FOR
SELECT * FROM TABLE2

计划表数据

--声明游标
declare test_Cursortable3 CURSOR FOR
SELECT id,NAME FROM TABLE3
--打开游标
OPEN test_Cursortable3
--声明游标提取变量所要存放的变量
declare @id int,@name varchar(20)
--定位游标到哪一行
fetch next from test_Cursortable3 into @id,@name    --into的变量数量必须需与游标查询结果的列数相同
--fetch FIRST from test_Cursortable3 into @id,@name
while @@FETCH_STATUS=0  --提取成功,进行下一条数据的提取操作
begin
    if @id=2
    begin
    Update TABLE3 Set sex='0' Where Current of test_Cursortable3 --更新当前行
    end
    if  @id=10
    begin
    delete TABLE3 where current  of test_Cursortable3    --删除当前行
    end
fetch next from test_Cursortable3 into @id,@name    --移动游标
end
--关闭游标
close    test_Cursortable3
--释放游标
deallocate test_Cursortable3

注释:

怎样定义游标

游标张开后,服务器会特意为游标分配一定的内存空间存放游标操作的数额结果集,同不时候选择游标也会对有个别数据举行约束。所以游标一旦用过,应立时关门,幸免服务器能源浪费。

图片 2

cursor_name:游标名称。
Local:功能域为部分,只在概念它的批管理,存款和储蓄进度或触发器中有效。
Global:功效域为大局,由连接试行的其他存款和储蓄进度或批管理中,都能够引用该游标。
[Local | Global]:默认为local。
Forward_Only:钦定游标智能从第一行滚到最终一行。 Fetch Next是独一帮衬的领到选项。要是在内定Forward_Only时不钦定Static、KeySet、Dynamic关键字,默感觉Dynamic游标。假使Forward_Only和Scroll未有一些名,Static、KeySet、Dynamic游标默以为Scroll,法斯特_Forward默认为Forward_Only
Static:静态游标
KeySet:键集游标
Dynamic:动态游标,不协理Absolute提取选项
Fast_Forward:钦命启用了质量优化的Forward_Only、Read_Only游标。
Read_Only:意味着声明的游标只好读取数据,游标无法做任何更新操作
Scroll_Locks:将读入游标的具备数据举行锁定,防止别的程序实行退换,以保障更新的相对化成功
Optimistic:是绝比较较好的二个接纳,OPTIMISTIC不锁定任何数据,当要求在游标中更新数据时,若是底层表数据更新,则游标内数据更新不成事,假设,底层表数据未更新,则游标内表数据足以立异。
Type_Warning:钦赐将游标从所哀求的档案的次序隐式转变为另一种类型时向顾客端发送警告音讯。
For Update[of column_name ,....] :定义游标中可更新的列。

游标(Cursor):

应用游标时注意事项:

SQL Server帮忙的API服务器游标分为4种:
静态游标( STATIC )意味着,当游标被确马上,将会创立FOWrangler后面包车型地铁SELECT语句所含有数据集的副本存入tempdb数据库中,任何对于底层表内数据的退换不会耳濡目染到游标的剧情。
动态游标( DYNAMIC )是和STATIC完全相反的选项,当底层数据库改换时,游标的内容也跟着获得反映,在下二遍fetch中,数据内容会随着转移。
键集驱动游标( KEYSET )可以清楚为介于STATIC和DYNAMIC的折中方案。将游标所在结果集的当世无双能显明每一行的主键存入tempdb,当结果聚焦任何行更动大概去除时,@@FETCH_STATUS会为-2,KEYSET不可能探测新参加的多寡。
只进游标    能够知道成不援救滚动,只帮助从头到尾顺序提取数额,数据库试行增加和删除改,在提取时是可知的,但由于该游标只可以进不可能向后滚动,所以在行提取后对行做增删改是不可知的。 ( FAST_FO翼虎WALANDD 能够知道为FO宝马X3WA本田UR-VD_ONLY的优化版本.FO途睿欧WARD_ONLY施行的是静态布署,而FAST_FO奥迪Q5WAPAJEROD是基于气象张开抉择使用动态布署照旧静态布置,大大多情景下FAST_FORWARD要比FORWARD_ONLY质量略好。

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:基础知识梳理

关键词: