@@FETCH_STATUS 是否有(或需要)相当于 SCOPE_IDENTITY 的?

Eri*_*sen 3 sql-server sql-server-2008-r2 cursors

MSDN 建议@@FETCH_STATUS谨慎使用,因为它是全球性的

因为@@FETCH_STATUS 对连接上的所有游标都是全局的,所以请谨慎使用@@FETCH_STATUS。执行 FETCH 语句后,必须在针对另一个游标执行任何其他 FETCH 语句之前对 @@FETCH_STATUS 进行测试。

这让我想到两个问题:

  1. 另一个(非嵌套)游标是否有可能与我的游标同时运行并影响@@FETCH_STATUSmyFETCH NEXTWHILEcondition之间的值?例如,假设另一个游标位于按计划调用的存储过程中。
  2. 如果这是可能的,是否@@FETCH_STATUS有等价于@@IDENTITY's SCOPE_IDENTITY()

Jam*_*See 7

  1. 只要它们不是嵌套的,你应该没问题。@@FETCH_STATUS 在执行 FETCH NEXT 时设置。@@FETCH_STATUS 对会话是全局的,而不是整个服务器。
  2. @@FETCH_STATUS 没有与 SCOPE_IDENTITY() 等效的方法。如果您需要嵌套循环的 FETCH NEXT 操作,请确保在内部循环完成后执行外部 FETCH NEXT。如果您需要在包含 FETCH NEXT 的内部循环之前堆叠 FETCH NEXT 操作或执行 FETCH NEXT,您可以int在循环外声明一个临时变量,在 FETCH NEXT 语句之后立即将临时变量设置为等于 @@FETCH_STATUS,然后使用临时变量作为循环控制而不是@@FETCH_STATUS。