rm01 , @Parm02 , @Parm03
1 UPDATE PPS_App_Infomation SET GameName ='熬夜虫子forupdate' WHERE CURRENT OF cur_Pay
2 PRINT @Parm01+'__'+@Parm02+'__'+@Parm03
3 END
消息16929,级别16,状态1,第9 行
游标是只读的。
语句已终止。熬夜虫子__Maoya__06 20 2009 1:32PM
1 DECLARE cur_Pay INSENSITIVE SCROLL CURSOR FOR
2 SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation]
3 FOR UPDATE
消息1048,级别15,状态1,第7 行
游标选项FOR UPDATE 和INSENSITIVE 冲突。
01 DECLARE cur_Pay SCROLL CURSOR FOR
02 SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation]
03 FOR Update
04 OPEN cur_Pay
05 BEGIN
06 FETCH LAST FROM cur_Pay INTO @Parm01 , @Parm02 , @Parm03
07 UPDATE PPS_App_Infomation SET GameName ='熬夜虫子forupdate' WHERE CURRENT OF cur_Pay
08 FETCH LAST FROM cur_Pay INTO @Parm01 , @Parm02 , @Parm03
09 PRINT @Parm01+'__'+@Parm02+'__'+@Parm03
10 END
(1 行受影响)
熬夜虫子forupdate__Maoya__06 20 2009 1:32PM
READ ONLY不允许通过游标进行定位更新,并且不持有针对组成结果集的行的锁。UPDATE与READ ONLY相对,并且UPDATE可以定义到可更新的列。
语法基础(SQL SERVER扩展格式)
基础数据同上
01 DECLARE @Parm01 varchar(100)
02 DECLARE @Parm02 varchar(100)
03 DECLARE @Parm03 varchar(100)
04 DECLARE cur_Pay CURSOR
05 GLOBAL --和SQL-92格式同理 可选LOCAL本地游标
06 SCROLL --可选FORWARD_ONLY 指定游标只能从第一行滚动到最后一行
07 DYNAMIC --和上一行参数关联static表示临时副本DYNAMIC直接反映在滚动游标时对结果集内行所做的修改
08 --keyset表示除了唯一键其他都获取最新值FAST_FORWARD性能优化的FOR_WARD READONLY游标
09 OPTIMISTIC --可选READ_ONLY同上SCROLL_LOCKS定位更新并对当前数据加锁OPTIMISTIC想当与乐观锁可以进行更新动作但是如果读取的数据被更新会导致操作失败
10 TYPE_WARNING --如果游标从所请求的类型隐形转换到另一种类型,则给客户端发送警告
11 FOR
12 SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation]
13 FOR UPDATE
14 OPEN cur_Pay
15 BEGIN
16 FETCH LAST FROM cur_Pay INTO @Parm01 , @Parm02 , @Parm03
17 PRINT @Parm01+'__'+@Parm02+'__'+@Parm03
18 END
19 DEALLOCATE cur_Pay
相关语法都直接注释在code里了 和SQL-92相似的部分就不赘述了
游标应用
定义游标变量cursor_variable_name
declare @tcur cursor
set @tcur = cursor for SELECT * FROM PPS_App_Infomation
打开游标OPEN {{[GLOBAL]cursor_name}|cursor_variable_name}
关闭游标CLOSE{{[GLOBAL]cursor_name}|cursor_variable_name}
释放游标DEALLOCATE{{[GLOBAL]cursor_name}|cursor_variable_name}
获取游标行数@@CURSOR_ROWS
1 DECLARE cur_Pay INSENSITIVE SCROLL CURSOR FOR
2 SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation]
3 OPEN cur_Pay
4 BEGIN
5 PRINT @@CURSOR_ROWS
6 END
输出4
检测fetch操作的状态@@FETCH_STATUS 返回值0表示fetch语句执行成功-1表示fetch语句执行失败或此行不再结果集中-2表示所要读取的数据信息不存在
1 DECLARE cur_Pay INSENSITIVE SCROLL CURSOR FOR
2 SELECT GameName,CreateUser,CreateDate FROM [PicPromotion].[dbo].[PPS_App_Infomation]
3 FETCH next FROM cur_Pay
4 OPEN cur_Pay
5 BEGIN
6 if(@@FETCH_STATUS = 0) print('FETCH 语句成功')
7 if(@@FETCH_STATUS = -1) print('FETCH 语句失败或行不在结果集中')
8 if(@@FETCH_STATUS = -2) print('提取的行不存在')
9 END
消息 16917,级别 16,状态 2,第 6 行
游标未打开。
FETCH 语句失败或行不在结果集中
游标嵌套
在游标中使用另一个游标。一般来说使用游标已经很占用系统资源了,再嵌套游标会大影响效率,本文只作参考用。
添加一张数据表PPS_AppConfig_Infomation
