報告服務器游標的特性。
sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT
{ [ , [ @cursor_source = ] N'local'
, [ @cursor_identity = ] N'local_cursor_name' ]
| [ , [ @cursor_source = ] N'global'
, [ @cursor_identity = ] N'global_cursor_name' ]
| [ , [ @cursor_source = ] N'variable'
, [ @cursor_identity = ] N'input_cursor_variable' ]
}
[@cursor_return =] output_cursor_variable OUTPUT
聲明游標變量的名稱,該變量接收游標輸出。output_cursor_variable 的數據類型為 cursor,沒有默認值。調用 sp_describe_cursor 時,不能與任何游標相關聯。返回的游標是可滾動的動態(tài)只讀游標。
[@cursor_source =] { N'local' | N'global' | N'variable' }
指定是使用本地游標的名稱、全局游標的名稱、還是游標變量的名稱來指定當前正在對其進行報告的游標。參數是 nvarchar(30)。
[@cursor_identity =] N'local_cursor_name']
由具有 LOCAL 關鍵字或默認設置為 LOCAL 的 DECLARE CURSOR 語句創(chuàng)建的游標的名稱。local_cursor_name 的數據類型為 nvarchar(128)。
[@cursor_identity =] N'global_cursor_name']
由具有 GLOBAL 關鍵字或默認設置為 GLOBAL 的 DECLARE CURSOR 語句創(chuàng)建的游標的名稱。也可以是由 ODBC 應用程序打開然后通過調用 SQLSetCursorName 對游標命名的 API 服務器游標的名稱。global_cursor_name 的數據類型為 nvarchar(128)。
[@cursor_identity =] N'input_cursor_variable']
與開放游標相關聯的游標變量的名稱。input_cursor_variable 的數據類型為 nvarchar(128)。
無
sp_describe_cursor 將結果集封裝在 Transact-SQL cursor 輸出參數中。這樣,Transact-SQL 批處理、存儲過程和觸發(fā)器就得以按一次一行的方式處理輸出。它還意味著無法直接從數據庫 API 函數直接調用該過程。cursor 輸出參數必須綁定到程序變量,但是數據庫 API 不支持綁定 cursor 參數或變量。
下面是 sp_describe_cursor 返回的游標格式。游標格式與 sp_cursor_list 返回的格式相同。
列名 | 數據類型 | 描述 |
---|---|---|
reference_name | sysname | 用來引用游標的名稱。如果通過 DECLARE CURSOR 語句中給定的名稱引用游標,則引用名稱與游標名稱相同。如果通過變量引用游標,則引用名稱即為游標變量的名稱。 |
cursor_name | sysname | 來自 DECLARE CURSOR 語句的游標名稱。如果游標是通過將游標變量設置為游標而創(chuàng)建的,則游標名稱為系統生成的名稱。 |
cursor_scope | tinyint | 1 = LOCAL 2 = GLOBAL |
status | int | 與 CURSOR_STATUS 系統函數報告的值相同: 1 = 游標名稱或變量引用的游標打開。如果游標為不感知游標、靜態(tài)游標或鍵集游標,則至少包含一行。如果游標是動態(tài)游標,則結果集包含零行或更多的行。 |
model | tinyint | 1 = 不感知(或靜態(tài)) 2 = 鍵集 3 = 動態(tài) 4 = 快進 |
concurrency | tinyint | 1 = 只讀 2 = 滾動鎖 3 = 樂觀 |
scrollable | tinyint | 0 = 只進 1 = 可滾動 |
open_status | tinyint | 0 = 關閉 1 = 打開 |
cursor_rows | decimal(10,0) | 結果集中合格的行數。有關更多信息,請參見 @@CURSOR_ROWS。 |
fetch_status | smallint | 此游標上次提取的狀態(tài)。有關更多信息,請參見 @@FETCH_STATUS。 0 = 提取成功。 |
column_count | smallint | 游標結果集中的列數。 |
row_count | decimal(10,0) | 上次對游標的操作所影響的行數。有關更多信息,請參見 @@ROWCOUNT。 |
last_operation | tinyint | 上次對游標執(zhí)行的操作: 0 = 沒有對游標執(zhí)行操作。 |
cursor_handle | int | 在服務器范圍內游標的唯一值。 |
sp_describe_cursor 描述服務器游標的全局特性,比如滾動和更新的能力。使用 sp_describe_cursor_columns 描述由游標返回的結果集的特性。使用 sp_describe_cursor_tables 報告游標所引用的基表。使用 sp_cursor_list 可獲得連接時可視的 Transact-SQL 服務器游標的報告。
DECLARE CURSOR 語句可能會請求一個 Microsoft® SQL Server™ 使用 DECLARE CURSOR 中包含的 SELECT 語句不能支持的游標類型。SQL Server 隱式地將游標轉換成支持 SELECT 語句的類型。如果在 DECLARE CURSOR 語句中指定 TYPE_WARNING,SQL Server 向應用程序發(fā)送一條轉換完畢的消息。然后就可以調用 sp_describe_cursor 確定已實現的游標類型。
執(zhí)行權限默認賦予 public 角色。
下面的示例打開一個全局游標,并使用 sp_describe_cursor 報告游標的特性。
USE Northwind相關文章
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Employees
OPEN abc
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report CURSOR
-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor @cursor_return = @Report OUTPUT,
@cursor_source = N'global', @cursor_identity = N'abc'
-- Fetch all the rows from the sp_describe_cursor output cursor.
FETCH NEXT from @Report
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT from @Report
END
-- Close and deallocate the cursor from sp_describe_cursor.
CLOSE @Report
DEALLOCATE @Report
GO
-- Close and deallocate the original cursor.
CLOSE abc
DEALLOCATE abc
GO