Sql-Server
@@FETCH_STATUS 是否有(或需要)等同於 SCOPE_IDENTITY?
MSDN 建議
@@FETCH_STATUS
謹慎使用,因為它是全球性的:因為@@FETCH_STATUS 對於連接上的所有游標都是全域的,所以請謹慎使用@@FETCH_STATUS。執行 FETCH 語句後,必須在針對另一個游標執行任何其他 FETCH 語句之前對 @@FETCH_STATUS 進行測試。
這讓我想到了兩個問題:
- 是否有可能另一個(非嵌套)游標可以與我的同時執行並影響
@@FETCH_STATUS
我FETCH NEXT
和WHILE
條件之間的值?例如,假設另一個游標位於按計劃呼叫的儲存過程中。- 如果這是可能的,是否
@@FETCH_STATUS
有@@IDENTITY
‘s的等價物SCOPE_IDENTITY()
?
- 只要它們沒有嵌套,就應該沒問題。@@FETCH_STATUS 在執行 FETCH NEXT 時設置。@@FETCH_STATUS 對會話來說是全域的,而不是整個伺服器。
- @@FETCH_STATUS 沒有等效於 SCOPE_IDENTITY() 的方法。如果需要嵌套循環的 FETCH NEXT 操作,請確保在內部循環完成後執行外部 FETCH NEXT。如果您需要在包含 FETCH NEXT 的內部循環之前堆疊 FETCH NEXT 操作或執行 FETCH NEXT,您可以
int
在循環外聲明一個臨時變數類型,在 FETCH NEXT 語句之後立即將臨時變數設置為等於@@FETCH_STATUS,然後使用臨時變數代替@@FETCH_STATUS 作為循環控制。