Sql-Server

@@FETCH_STATUS 是否有(或需要)等同於 SCOPE_IDENTITY?

  • December 12, 2018

MSDN 建議@@FETCH_STATUS謹慎使用,因為它是全球性的

因為@@FETCH_STATUS 對於連接上的所有游標都是全域的,所以請謹慎使用@@FETCH_STATUS。執行 FETCH 語句後,必須在針對另一個游標執行任何其他 FETCH 語句之前對 @@FETCH_STATUS 進行測試。

這讓我想到了兩個問題:

  1. 是否有可能另一個(非嵌套)游標可以與我的同時執行並影響@@FETCH_STATUSFETCH NEXTWHILE條件之間的值?例如,假設另一個游標位於按計劃呼叫的儲存過程中。
  2. 如果這是可能的,是否@@FETCH_STATUS@@IDENTITY‘s的等價物SCOPE_IDENTITY()
  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 作為循環控制。

引用自:https://dba.stackexchange.com/questions/129127