分享方式:


sp_describe_cursor_columns (Transact-SQL)

適用於:SQL Server

報告伺服器數據指標結果集中數據行的屬性。

Transact-SQL 語法慣例

語法

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_identitylocal

  • 如果 cursor 具有 GLOBAL 關鍵字,或預設為 GLOBAL@cursor_identityglobal@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 = 可為 Null
8 = 資料列版本設定
16 = 可更新的數據行(針對沒有 FOR UPDATE 子句的數據指標投影數據行設定,如果有這類數據行,則每個數據指標只能有一個數據行)。

結合位值時,會套用合併位值的特性。 例如,如果位值為 6,則數據行是固定長度 ()、可為 Null 的 (24) 資料行。
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