syn*_*012 6 sql t-sql sql-server cursor fetch
我需要一些例子@@fetch_status值-2和-9
0 = The FETCH statement was successful.
-1 = The FETCH statement failed or the row was beyond the result set.
Run Code Online (Sandbox Code Playgroud)
这是一个示例游标示例
declare @country varchar(50)
declare cur_country cursor for
select name from global
open cur_country
fetch next from cur_country into @country
print @@FETCH_STATUS
while (@@FETCH_STATUS=0)
begin
insert into country select @country
fetch next from cur_country into @country
end
close cur_country
deallocate cur_country.
Run Code Online (Sandbox Code Playgroud)
-2 提取的行丢失了.
-9 游标未执行获取操作.
基本上需要@@FETCH_STATUS给出-20r的场景-9
@@FETCH_STATUS = -2通常在光标的某个进程OUTSIDE删除光标所基于的表中的行时发生.
如果作业1打开游标并开始循环遍历table1中的记录,并且作业1循环时,作业2出现并删除table1中的某些记录,作业1在尝试检索它期望的行时可能返回-2 find(因为它在光标启动时存在).
以下主题包含一个示例@@FETCH_STATUS = -2
在研究的过程中,我从这个主题中找到了以下解释:
"指定在游标打开时光标中的成员资格和行顺序是固定的.唯一标识行的键集合被构建在tempdb中称为键集的表中.对基表中非键值的更改,由光标所有者创建或由其他用户提交,当所有者在光标周围滚动时可见.其他用户创建的插入不可见(无法通过Transact-SQL服务器游标进行插入).如果删除了行,尝试获取该行将返回@@ FETCH_STATUS为-2.从光标外部更新键值类似于删除旧行,然后插入新行.具有新值的行不可见,并且尝试获取具有旧值的行返回@@ FETCH_STATUS为-2.如果通过指定WHERE CURRENT OF子句通过游标完成更新,则新值是可见的.
和DVT一样评论.此Stackoverflow问题包含一个示例@@FETCH_STATUS = -9
有关详细信息,请@@FETCH_STATUS参阅此MSDN文章
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |