MSSQL遊標函數-@@CURSOR_ROWS、CURSOR_STATUS、@@FETCH_STATUS

2020-11-23 性感的小土豆

所有遊標函數都是非確定性的。 也就是在同樣一個環境中輸入同一組值,在返回的結果中也不一定每次都返回同樣的結果集。根據資料庫版本而定,有些版本可能已經取消了。

@@CURSOR_ROWS全局變量返回在連接上打開的上一個遊標中當前擁有的限定行的數目。為了提高性能, SQL Server可以異步填充大型鍵集和靜態遊標。可調用@@CURSOR_ROWS以確定當@@CURSOR_ROWS被調用時檢索了遊標符合條件的行數。語法【SELECT @@CURSOR_ROWS】,其中返回類型為integer數據類型。其返回值有四種如下圖。

如果異步打開最後一個遊標,@@CURSOR_ROWS 返回負數。 如果 sp_configure cursor threshold 的值超過 0,且遊標結果集中的行數大於遊標閾值,則異步打開鍵集驅動程序或靜態遊標。

@@FETCH_STATUS全局變量返回針對連接當前打開的任何遊標發出的最後一條遊標 FETCH 語句的狀態。語法【SELECT @@FETCH_STATUS】。返回值也是integer類型的。其中返回值類型對比如下圖。

由於@@FETCH_STATUS對於在一個連接上的所有遊標都是全局性的,所以要謹慎使用。在執行一條 FETCH 語句後,必須在對另一遊標執行另一 FETCH語句前測試@@FETCH_STATUS。在此連接上出現任何提取操作之前,@@FETCH_STATUS 沒有定義。

CURSOR_STATUS函數在對於給定參數,CURSOR_STATUS顯示遊標聲明是否已返回遊標或結果集。基本語法【CURSOR_STATUS({'local' ,'cursor_name' }|{'global','cursor_name'}|{'variable','cursor_variable'})】其中有五個參數,具體意義如下。

CURSOR_STATUS()函數返回類型為smallint數據類型,返回值有五種,分別為1、0、-1、-2、-3。表示的含義各不同。

在使用遊標函數時一定要注意所有的遊標函數的返回結果都不是唯一的,如果程序中需要用到遊標函數時一定要謹慎使用,一定要注意函數的不確定性,使用過程中一定要前後多次調用以至於不要出現非確定性的錯誤。

相關焦點

  • SQL SERVER 參考:遊標(Cursor)的講解與實例
    cursor for select * from yuangong   2.定義一個只讀遊標:   4.打開遊標:open 遊標名  如:declare mycursor cursor for select *
  • 利用SQL遊標核對銀行對帳單與銀行日記帳
    而利用SQL遊標則可以快速查找未達帳項,從而取得事半功倍的效果。   一、採集銀行對帳單和單位日記帳數據,並進行必要的整理轉換,使其對應欄位的長度、數據類型相同。如:通常銀行日記帳的支票號為銀行對帳單的憑證號的後四位,因此應對銀行對帳單的憑證號作截斷處理。
  • SQL遊標原理和使用方法
    在DataWindow和DataStore中,執行了Retrieve ()函數以後,查詢的所有結果全部可以得到;而使用遊標,我們只能逐條記錄地得到查詢結果。已經聲明並打開一個遊標後,我們就可以將數據放入任意的變量中。在FETCH語句中您可以指定遊標的名稱和目標變量的名稱。
  • 遊標腳本性能問題詳解之案例實踐篇
    'exec sp_cursorfetch @p2,2,4,1  exec sp_cursorclose @p2  理想的遊標類型S_SRV_REQ','1-WUQTM6'  select @p1, @p2, @p5, @p6, @p7print '2'exec sp_cursorfetch
  • Oracle筆記-分析函數
    第 12 章 分析函數  12.1 分析函數如何工作  語法  FUNCTION_NAME(<參數>,…)  OVER  (<PARTITION BY 表達式,…> <ORDER BY 表達式 <ASC | DESC> <
  • A 41-year-old Hispanic man with altered mental status
    A 41-year-old Hispanic man with altered mental status, later found to be