報告服務器游標結(jié)果集中的列特性。
sp_describe_cursor_columns
[ @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 的數(shù)據(jù)類型為 cursor,沒有默認值。調(diào)用 sp_describe_cursor_columns 時,不能與任何游標相關(guān)聯(lián)。返回的游標是可滾動的動態(tài)只讀游標。
[@cursor_source =] { N'local' | N'global' | N'variable' }
指定是使用本地游標的名稱、全局游標的名稱、還是游標變量的名稱來指定當前正在對其進行報告的游標。參數(shù)是 nvarchar(30)。
, [@cursor_identity = ] N'local_cursor_name' ]
由具有 LOCAL 關(guān)鍵字或默認設置為 LOCAL 的 DECLARE CURSOR 語句創(chuàng)建的游標的名稱。local_cursor_name 的數(shù)據(jù)類型為 nvarchar(128)。
[@cursor_identity =] N'global_cursor_name'
由具有 GLOBAL 關(guān)鍵字或默認設置為 GLOBAL 的 DECLARE CURSOR 語句創(chuàng)建的游標的名稱。也可以是由 ODBC 應用程序打開然后通過調(diào)用 SQLSetCursorName 對游標命名的 API 服務器游標的名稱。global_cursor_name 的數(shù)據(jù)類型為 nvarchar(128)。
[@cursor_identity =] N'input_cursor_variable'
與開放游標相關(guān)聯(lián)的游標變量的名稱。input_cursor_variable 的數(shù)據(jù)類型為 nvarchar(128)。
無
sp_describe_columns 將其報表封裝成 Transact-SQL cursor 輸出參數(shù)。這樣,Transact-SQL 批處理、存儲過程和觸發(fā)器就得以按一次一行的方式處理輸出。它還意味著無法直接從數(shù)據(jù)庫 API 函數(shù)直接調(diào)用該過程。cursor 輸出參數(shù)必須綁定到程序變量,但是數(shù)據(jù)庫 API 不支持綁定 cursor 參數(shù)或變量。
下面是 sp_describe_cursor_columns 返回的游標格式。
列名 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
column_name | sysname nullable | 給結(jié)果集列指派的名稱。如果指定列時不帶 AS 子句,則該列為 NULL。 |
ordinal_position | int | 從結(jié)果集最左邊一列算起的相對位置。首列的位置為 1。任何隱藏列的值為 0。 |
column_characteristics_flags | int | 位掩碼表示存儲在 OLE DB 的 DBCOLUMNFLAGS 中的信息??梢允窍铝羞x項之一: 1 = 書簽 |
column_size | int | 此列中的值最大的可能大小。 |
data_type_sql | smallint | 表示列的 SQL Server 數(shù)據(jù)類型的數(shù)字。 |
column_precision | tinyint | 列最大精度,為 OLE DB 中的 bPrecision 值。 |
column_scale | tinyint | numeric 或 decimal 數(shù)據(jù)類型小數(shù)點右邊的位數(shù),為 OLE DB 中的 bScale 值。 |
order_position | int | 如果此列參與結(jié)果集排序,則指它在排序鍵中相對于最左邊的列的位置。 |
order_direction | varchar(1), nullable | A = 該列包含在排序鍵中,按升序排列。 D = 該列包含在排序鍵中,按降序排列。 NULL = 該列沒有參與排序。 |
hidden_column | smallint | 如果值為 0,則此列出現(xiàn)在選擇列表中。值為 1 則保留以備將來使用。 |
columnid | int | 基列的列 ID。如果結(jié)果集列由表達式生成,則 columnid 為 1。 |
objectid | int | 提供列的基表的對象 ID。如果結(jié)果集列由表達式生成,則 objectid 為 1。 |
dbid | int | 包含提供列的基表的數(shù)據(jù)庫 ID。如果結(jié)果集列由表達式生成,則 dbid 為 1。 |
dbname | sysname nullable | 包含提供列的基表的數(shù)據(jù)庫名稱。如果結(jié)果集列由表達式生成,則 dbname 為 NULL。 |
sp_describe_cursor_columns 描述服務器游標結(jié)果集中的列特性,例如每個游標的名稱和數(shù)據(jù)類型。使用 sp_describe_cursor 描述服務器游標的全局特性。使用 sp_describe_cursor_tables 報告游標所引用的基表。使用 sp_cursor_list 可獲得連接時可視的 Transact-SQL 服務器游標的報告。
執(zhí)行權(quán)限默認授予 public 角色。
下面的示例打開一個全局游標,并使用 sp_describe_cursor_columns 報告游標所使用的列。
USE Northwind相關(guān)文章
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Employees
GO
OPEN abc
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_columns.
DECLARE @Report CURSOR
-- Execute sp_describe_cursor_columns into the cursor variable.
EXEC master.dbo.sp_describe_cursor_columns
@cursor_return = @Report OUTPUT,
@cursor_source = N'global', @cursor_identity = N'abc'
-- Fetch all the rows from the sp_describe_cursor_columns 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_columns.
CLOSE @Report
DEALLOCATE @Report
GO
-- Close and deallocate the original cursor.
CLOSE abc
DEALLOCATE abc
GO