共用方式為


sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)

此動態管理函數接受 @object\_id 做為參數,並描述具有該識別碼之模組的第一個結果中繼資料。 指定的 @object\_id 可以是 Transact-SQL 預存程序或 Transact-SQL 觸發程序的識別碼。 如果是任何其他物件 (例如檢視表、資料表、函數或 CLR 程序) 的識別碼,結果的錯誤資料行中會指定錯誤。

sys.dm_exec_describe_first_result_set_for_objectsys.dm_exec_describe_first_result_set (Transact-SQL) 有相同的結果集定義,而且與 sp_describe_first_result_set (Transact-SQL) 類似。

主題連結圖示 Transact-SQL 語法慣例

語法

sys.dm_exec_describe_first_result_set_for_object 
    ( @object_id , @include_browse_information )

引數

  • @object\_id
    Transact-SQL 預存程序或 Transact-SQL 觸發程序的 @object\_id。 @object\_id 是 int 類型。

  • @include\_browse\_information
    @include\_browse\_information 是 bit 類型。 如果設定為 1,就會分析每個查詢,如同查詢上有 FOR BROWSE 選項一樣。 會傳回其他索引鍵資料行和來源資料表資訊。

傳回的資料表

這個通用的中繼資料會當做結果集來傳回,而結果中繼資料中的每個資料行都會有一個資料列。 每個資料列都會使用下一節所描述的格式來描述資料行的類型和 Null 屬性。 如果每個控制項路徑都沒有第一個陳述式,就會傳回具有零個資料列的結果集。

資料行名稱

資料類型

說明

is_hidden

bit

指定資料行是否為了用來瀏覽資訊而加入的額外資料行,而不會實際顯示在結果集中。

column_ordinal

int

包含資料行在結果集中的序數位置。 第一個資料行的位置將會指定為 1。

name

sysname

如果可以判別名稱,則包含資料行名稱。 否則為 NULL。

is_nullable

bit

如果資料行允許 NULL 則包含值 1,如果資料行不允許 NULL 則包含 0,此外,如果無法判別資料行是否允許 NULL,則為 1。

system_type_id

int

包含 sys.types 中所指定資料行之資料類型的 system_type_id。 針對 CLR 類型,即使 system_type_name 資料行將傳回 NULL,這個資料行將會傳回值 240。

system_type_name

nvarchar(256)

包含資料類型名稱。 包含指定給資料行之資料類型的引數 (例如長度、有效位數、小數位數)。 如果資料類型是使用者定義的別名類型,這裡就會指定基礎系統類型。 如果它是 CLR 使用者定義類型,這個資料行就會傳回 NULL。

max_length

smallint

資料行的最大長度 (以位元組為單位)。

-1 = 資料行資料類型是 varchar(max)、nvarchar(max)、varbinary(max) 或 xml。

對於 text 資料行來說,max_length 值將會是 16 或由 sp_tableoption 'text in row' 設定的值。

precision

tinyint

如果以數值為基礎,就是資料行的有效位數。 否則,便傳回 0。

scale

tinyint

如果是以數值為基礎,便是資料行的小數位數。 否則,便傳回 0。

collation_name

sysname

如果是以字元為基礎,便是資料行的定序名稱。 否則,便傳回 NULL。

user_type_id

int

針對 CLR 和別名類型,包含 sys.types 中所指定資料行之資料類型的 user_type_id。 否則為 NULL。

user_type_database

sysname

針對 CLR 和別名類型,會包含定義類型之資料庫的名稱。 否則,便為 NULL。

user_type_schema

sysname

針對 CLR 和別名類型,會包含定義類型之結構描述的名稱。 否則,便為 NULL。

user_type_name

sysname

針對 CLR 和別名類型,會包含類型的名稱。 否則,便為 NULL。

assembly_qualified_type_name

nvarchar(4000)

針對 CLR 類型,會傳回定義類型之組件與類別的名稱。 否則,便為 NULL。

xml_collection_id

int

包含資料行之資料類型的 xml_collection_id,如同在 sys.columns 中所指定。 如果傳回的類型沒有與 XML 結構描述集合相關聯,這個資料行將傳回 NULL。

xml_collection_database

sysname

包含定義與這個類型相關聯之 XML 結構描述集合的資料庫。 如果傳回的類型沒有與 XML 結構描述集合相關聯,這個資料行將傳回 NULL。

xml_collection_schema

sysname

包含定義與這個類型相關聯之 XML 結構描述集合的結構描述。 如果傳回的類型沒有與 XML 結構描述集合相關聯,這個資料行將傳回 NULL。

xml_collection_name

sysname

包含與這個類型相關聯之 XML 結構描述集合的名稱。 如果傳回的類型沒有與 XML 結構描述集合相關聯,這個資料行將傳回 NULL。

is_xml_document

bit

如果正要傳回的資料類型是 XML,而且該類型保證是完整 XML 文件 (包含根節點),而不是 XML 片段,則傳回 1, 否則傳回 0。

is_case_sensitive

bit

如果資料行是區分大小寫的字串類型,則傳回 1,否則傳回 0。

is_fixed_length_clr_type

bit

如果資料行是固定長度的 CLR 類型,則傳回 1,否則傳回 0。

source_server

sysname

在這個結果中的資料行所傳回的原始伺服器名稱 (如果它來自遠端伺服器)。 給定的名稱會如同在 sys.servers 中所顯示。 如果資料行來自本機伺服器,或是如果無法判別其原始伺服器,則傳回 NULL。 只會在要求瀏覽資訊時填入。

source_database

sysname

這個結果中的資料行所傳回之原始資料庫名稱。 如果無法判別資料庫,則傳回 NULL。 只會在要求瀏覽資訊時填入。

source_schema

sysname

這個結果中的資料行所傳回之原始結構描述名稱。 如果無法判別結構描述,則傳回 NULL。 只會在要求瀏覽資訊時填入。

source_table

sysname

這個結果的資料行所傳回之原始資料表名稱。 如果無法判別資料表,則傳回 NULL。 只會在要求瀏覽資訊時填入。

source_column

sysname

這個結果中的資料行所傳回之原始資料行名稱。 如果無法判別資料行,則傳回 NULL。 只會在要求瀏覽資訊時擴展。

is_identity_column

bit

如果資料行是識別欄位,則傳回 1;如果不是,則傳回 0。 如果它無法判別資料行是否為識別欄位,則傳回 NULL。

is_part_of_unique_key

bit

如果資料行是唯一索引 (包括唯一和主要的條件約束) 的一部分,則傳回 1;如果不是,則傳回 0。 如果它無法判別資料行是否為唯一索引的一部分,則傳回 NULL。 只會在要求瀏覽資訊時填入。

is_updateable

bit

如果資料行是可更新的,則傳回 1;如果不是,則傳回 0。 如果它無法判別資料行是否可更新,則傳回 NULL。

is_computed_column

bit

如果資料行是計算資料行,則傳回 1;如果不是,則傳回 0。 如果它無法判別資料行是否為計算資料行,則傳回 NULL。

is_sparse_column_set

bit

如果資料行是疏鬆資料行,則傳回 1,否則傳回 0。 如果無法判別資料行是否為疏鬆資料行集的一部分,則傳回 NULL。

ordinal_in_order_by_list

smallint

這個資料行在 ORDER BY 清單中的位置。如果資料行不會顯示在 ORDER BY 清單中,或如果無法唯一判別 ORDER BY 清單,則傳回 NULL。

order_by_list_length

smallint

ORDER BY 清單的長度。 如果沒有 ORDER BY 清單,或如果無法唯一判別 ORDER BY 清單,則傳回 NULL。 請注意,對於由 sp_describe_first_result_set 傳回的所有資料列來說,這個值都是一樣的。

order_by_is_descending

smallint NULL

如果 ordinal_in_order_by_list 不是 NULL,order_by_is_descending 資料行會回報此資料行的 ORDER BY 子句方向。 否則回報 NULL。

error_number

int

包含函數傳回的錯誤號碼。 如果資料行未發生錯誤,則包含 NULL。

error_severity

int

包含函數傳回的嚴重性。 如果資料行未發生錯誤,則包含 NULL。

error_state

int

包含函數傳回的狀態訊息。 如果未發生錯誤, 則資料行會包含 NULL。

error_message

nvarchar(4096)

包含函數傳回的訊息。 如果未發生錯誤,則資料行會包含 NULL。

error_type

int

包含整數,代表要傳回的錯誤。 對應到 error_type_desc。 請參閱備註下的清單。

error_type_desc

nvarchar(60)

包含簡短大寫字串,表示要傳回的錯誤。 對應到 error_type。 請參閱備註下的清單。

備註

這個函數與 sp_describe_first_result_set 使用相同的演算法。 如需詳細資訊,請參閱<sp_describe_first_result_set (Transact-SQL)>。

下表列出錯誤類型及其說明。

error_type

error_type

說明

1

MISC

未說明的所有錯誤。

2

SYNTAX

批次發生語法錯誤。

3

CONFLICTING_RESULTS

因為兩個可能的第一個陳述式之間的衝突,無法判定結果。

4

DYNAMIC_SQL

因為動態 SQL 可能傳回第一個結果,無法判定結果。

5

CLR_PROCEDURE

因為 CLR 預存程序可能傳回第一個結果,無法判定結果。

6

CLR_TRIGGER

因為 CLR 觸發程序可能傳回第一個結果,無法判定結果。

7

EXTENDED_PROCEDURE

因為擴充預存程序可能傳回第一個結果,無法判定結果。

8

UNDECLARED_PARAMETER

因為一個或多個結果集資料行的資料類型可能相依於未宣告的參數,無法判定結果。

9

RECURSION

因為批次包含遞迴陳述式,無法判定結果。

10

TEMPORARY_TABLE

因為批次包含暫存資料表且不受 sp_describe_first_result_set 支援,無法判定結果。

11

UNSUPPORTED_STATEMENT

因為批次包含 sp_describe_first_result_set 不支援的陳述式 (例如,FETCH、REVERT 等),無法判定結果。

12

OBJECT_ID_NOT_SUPPORTED

不支援傳遞至函數的 @object_id (亦即,不是預存程序)

13

OBJECT_ID_DOES_NOT_EXIST

系統目錄中找不到傳遞至函數的 @object_id。

權限

需要執行 @ tsql 引數的權限。

範例

A.傳回具有及不具有瀏覽資訊的中繼資料

下列範例會建立一個名為 TestProc2、可傳回兩個結果集的預存程序。 然後此範例示範 sys.dm_exec_describe_first_result_set 傳回此預存程序的第一個結果集相關資訊 (具有瀏覽資訊以及不具瀏覽資訊)。

CREATE PROC TestProc2
AS
SELECT object_id, name FROM sys.objects ;
SELECT name, schema_id, create_date FROM sys.objects ;
GO

SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 0) ;
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 1) ;
GO

B.結合 sys.dm_exec_describe_first_result_set_for_object 函數與資料表或檢視表

下列範例會使用 sys.procedures 系統目錄檢視和 sys.dm_exec_describe_first_result_set_for_object 函數來顯示 AdventureWorks2012 資料庫中所有預存程序之結果集的中繼資料。

USE AdventureWorks2012;
GO

SELECT p.name, r.* 
FROM sys.procedures AS p
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r;
GO

請參閱

參考

sp_describe_first_result_set (Transact-SQL)

sp_describe_undeclared_parameters (Transact-SQL)

sys.dm_exec_describe_first_result_set (Transact-SQL)