sp_describe_cursor_columns (Transact-SQL)
適用於:SQL Server
報告伺服器數據指標結果集中數據行的屬性。
語法
sp_describe_cursor_columns
[ @cursor_return = ] cursor_return OUTPUT
, [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
, [ @cursor_identity = ] N'cursor_identity'
[ ; ]
引數
[ @cursor_return = ] cursor_return OUTPUT
要接收數據指標輸出之宣告數據指標變數的名稱。 @cursor_return是int類型的 OUTPUT 參數,沒有預設值,而且在呼叫時sp_describe_cursor_columns
不得與任何數據指標相關聯。 傳回的數據指標是可捲動的動態只讀數據指標。
[ @cursor_source = ] { N'local' |N'global' |N'cursor_source' }
指定是否使用本機數據指標、全域數據指標或數據指標或數據指標變數的名稱來指定所報告的數據指標。 @cursor_source為 nvarchar(30),沒有預設值。
[ @cursor_identity = ] N'cursor_identity'
語句所 DECLARE CURSOR
建立之數據指標的名稱。 @cursor_identity為 nvarchar(128),沒有預設值。
如果 cursor 具有
LOCAL
關鍵字,或預設為LOCAL
, @cursor_identity 為local
。如果 cursor 具有
GLOBAL
關鍵字,或預設為GLOBAL
, @cursor_identity 為global
。 @cursor_identity也可以是 ODBC 應用程式開啟的 API 伺服器資料指標名稱,然後藉由呼叫SQLSetCursorName
來命名。否則, @cursor_identity 是與開啟數據指標相關聯的數據指標變數名稱。
傳回碼值
無。
傳回的數據指標
sp_describe_cursor_columns
將其報表封裝為 Transact-SQL cursor
輸出參數。 這可讓 Transact-SQL 批次、預存程式和觸發程式一次處理一個數據列。 這也表示無法直接從資料庫 API 函式呼叫程式。 cursor
輸出參數必須係結至程式變數,但資料庫 API 不支援係結cursor
參數或變數。
下表顯示使用 sp_describe_cursor_columns
傳回的數據指標格式。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
column_name |
sysname | 指派給結果集數據行的名稱。 如果指定資料列時沒有隨附AS 子句,則資料行為 NULL 。可為 Null。 |
ordinal_position |
int | 結果集中最左邊數據行的數據行相對位置。 第一個數據行位於 位置 0 。 |
column_characteristics_flags |
int | 位掩碼,表示儲存在 DBCOLUMNFLAGS OLE DB 中的資訊。 可以是下列值之一或組合:1 = 書籤2 = 固定長度4 = 可為 Null8 = 資料列版本設定16 = 可更新的數據行(針對沒有 FOR UPDATE 子句的數據指標投影數據行設定,如果有這類數據行,則每個數據指標只能有一個數據行)。結合位值時,會套用合併位值的特性。 例如,如果位值為 6 ,則數據行是固定長度 ()、可為 Null 的 (2 4 ) 資料行。 |
column_size |
int | 此數據行中值可能的大小上限。 |
data_type_sql |
smallint | 指出數據行之 SQL Server 資料類型的數位。 |
column_precision |
tinyint | 根據 bPrecision OLE DB 中的值,數據行的最大有效位數。 |
column_scale |
tinyint | 根據 OLE DB 中的值,數值或十進位數據類型bScale 小數點右邊的數位數目。 |
order_position |
int | 如果數據行參與結果集的順序,則數據行在相對於最左邊數據行的順序索引鍵中的位置。 |
order_direction |
varchar(1) | A = 數據行是以順序索引鍵表示,且順序為遞增。D = 數據行是順序索引鍵,而順序會遞減。NULL = 資料行不會參與排序。可為 Null。 |
hidden_column |
smallint | 0 = 此資料列會出現在選取清單中。1 = 保留供日後使用。 |
columnid |
int | 基底數據行的數據行標識碼。 如果結果集資料列是從表示式建置的, columnid 則 為 -1 。 |
objectid |
int | 提供數據行之物件或基表的物件標識碼。 如果結果集資料列是從表示式建置的, objectid 則 為 -1 。 |
dbid |
int | 包含提供數據行之基表的資料庫標識碼。 如果結果集資料列是從表示式建置的, dbid 則 為 -1 。 |
dbname |
sysname | 包含提供數據行之基表的資料庫名稱。 如果結果集資料行是從表示式建置的,dbname 為 NULL 。可為 Null。 |
備註
sp_describe_cursor_columns
描述伺服器數據指標結果集中數據行的屬性,例如每個數據指標的名稱和數據類型。 用於 sp_describe_cursor
伺服器數據指標之全域屬性的描述。 用於 sp_describe_cursor_tables
數據指標所參考之基表的報表。 若要取得連接上可見的 Transact-SQL 伺服器資料指標報表,請使用 sp_cursor_list
。
權限
需要 public 角色的成員資格。
範例
下列範例會開啟全域數據指標,並使用 sp_describe_cursor_columns
來報告數據指標中使用的數據行。
USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person;
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