@@ fetch_status值-2和-9的示例是什么

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

Had*_*adi 8

@@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文章

  • @syncdm2012好吧,您必须确保使用至少具有一个唯一索引/主键的表:否则,游标默认为“STATIC”游标,这意味着结果集的临时副本缓存在“ OPEN`,您永远看不到效果(根据设计,https://msdn.microsoft.com/de-at/library/ms180169.aspx)。顺便提一句。将表命名为“global”非常令人困惑,因为“GLOBAL”也是游标语法的可选关键字。 (2认同)