報(bào)告服務(wù)器游標(biāo)結(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
聲明游標(biāo)變量的名稱,該變量接收游標(biāo)輸出。output_cursor_variable 的數(shù)據(jù)類型為 cursor,沒(méi)有默認(rèn)值。調(diào)用 sp_describe_cursor_columns 時(shí),不能與任何游標(biāo)相關(guān)聯(lián)。返回的游標(biāo)是可滾動(dòng)的動(dòng)態(tài)只讀游標(biāo)。
[@cursor_source =] { N'local' | N'global' | N'variable' }
指定是使用本地游標(biāo)的名稱、全局游標(biāo)的名稱、還是游標(biāo)變量的名稱來(lái)指定當(dāng)前正在對(duì)其進(jìn)行報(bào)告的游標(biāo)。參數(shù)是 nvarchar(30)。
, [@cursor_identity = ] N'local_cursor_name' ]
由具有 LOCAL 關(guān)鍵字或默認(rèn)設(shè)置為 LOCAL 的 DECLARE CURSOR 語(yǔ)句創(chuàng)建的游標(biāo)的名稱。local_cursor_name 的數(shù)據(jù)類型為 nvarchar(128)。
[@cursor_identity =] N'global_cursor_name'
由具有 GLOBAL 關(guān)鍵字或默認(rèn)設(shè)置為 GLOBAL 的 DECLARE CURSOR 語(yǔ)句創(chuàng)建的游標(biāo)的名稱。也可以是由 ODBC 應(yīng)用程序打開(kāi)然后通過(guò)調(diào)用 SQLSetCursorName 對(duì)游標(biāo)命名的 API 服務(wù)器游標(biāo)的名稱。global_cursor_name 的數(shù)據(jù)類型為 nvarchar(128)。
[@cursor_identity =] N'input_cursor_variable'
與開(kāi)放游標(biāo)相關(guān)聯(lián)的游標(biāo)變量的名稱。input_cursor_variable 的數(shù)據(jù)類型為 nvarchar(128)。
無(wú)
sp_describe_columns 將其報(bào)表封裝成 Transact-SQL cursor 輸出參數(shù)。這樣,Transact-SQL 批處理、存儲(chǔ)過(guò)程和觸發(fā)器就得以按一次一行的方式處理輸出。它還意味著無(wú)法直接從數(shù)據(jù)庫(kù) API 函數(shù)直接調(diào)用該過(guò)程。cursor 輸出參數(shù)必須綁定到程序變量,但是數(shù)據(jù)庫(kù) API 不支持綁定 cursor 參數(shù)或變量。
下面是 sp_describe_cursor_columns 返回的游標(biāo)格式。
列名 | 數(shù)據(jù)類型 | 描述 |
---|---|---|
column_name | sysname nullable | 給結(jié)果集列指派的名稱。如果指定列時(shí)不帶 AS 子句,則該列為 NULL。 |
ordinal_position | int | 從結(jié)果集最左邊一列算起的相對(duì)位置。首列的位置為 1。任何隱藏列的值為 0。 |
column_characteristics_flags | int | 位掩碼表示存儲(chǔ)在 OLE DB 的 DBCOLUMNFLAGS 中的信息??梢允窍铝羞x項(xiàng)之一: 1 = 書(shū)簽 |
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ù)點(diǎn)右邊的位數(shù),為 OLE DB 中的 bScale 值。 |
order_position | int | 如果此列參與結(jié)果集排序,則指它在排序鍵中相對(duì)于最左邊的列的位置。 |
order_direction | varchar(1), nullable | A = 該列包含在排序鍵中,按升序排列。 D = 該列包含在排序鍵中,按降序排列。 NULL = 該列沒(méi)有參與排序。 |
hidden_column | smallint | 如果值為 0,則此列出現(xiàn)在選擇列表中。值為 1 則保留以備將來(lái)使用。 |
columnid | int | 基列的列 ID。如果結(jié)果集列由表達(dá)式生成,則 columnid 為 1。 |
objectid | int | 提供列的基表的對(duì)象 ID。如果結(jié)果集列由表達(dá)式生成,則 objectid 為 1。 |
dbid | int | 包含提供列的基表的數(shù)據(jù)庫(kù) ID。如果結(jié)果集列由表達(dá)式生成,則 dbid 為 1。 |
dbname | sysname nullable | 包含提供列的基表的數(shù)據(jù)庫(kù)名稱。如果結(jié)果集列由表達(dá)式生成,則 dbname 為 NULL。 |
sp_describe_cursor_columns 描述服務(wù)器游標(biāo)結(jié)果集中的列特性,例如每個(gè)游標(biāo)的名稱和數(shù)據(jù)類型。使用 sp_describe_cursor 描述服務(wù)器游標(biāo)的全局特性。使用 sp_describe_cursor_tables 報(bào)告游標(biāo)所引用的基表。使用 sp_cursor_list 可獲得連接時(shí)可視的 Transact-SQL 服務(wù)器游標(biāo)的報(bào)告。
執(zhí)行權(quán)限默認(rèn)授予 public 角色。
下面的示例打開(kāi)一個(gè)全局游標(biāo),并使用 sp_describe_cursor_columns 報(bào)告游標(biāo)所使用的列。
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