sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體
此動態管理函式會採用 @object_id 做為參數,並描述具有該識別碼之模組的第一個結果中繼資料。 指定的 @object_id 可以是 Transact-SQL 預存程式或 Transact-SQL 觸發程式的識別碼。 如果它是任何其他物件的識別碼(例如檢視表、資料表、函式或 CLR 程式),則會在結果的錯誤資料行中指定錯誤。
sys.dm_exec_describe_first_result_set_for_object 的結果集定義與 sys.dm_exec_describe_first_result_set (Transact-SQL) 相同, 類似于 sp_describe_first_result_set (Transact-SQL)。
語法
sys.dm_exec_describe_first_result_set_for_object
( @object_id , @include_browse_information )
引數
@object_id
@object_idTransact-SQL 預存程式的 或 Transact-SQL 觸發程式的 。 @object_id為 int 類型 。
@include_browse_information
@include_browse_information 是類型 位 。 如果設定為 1,則會分析每個查詢,就像查詢上有 FOR BROWSE 選項一樣。 傳回其他索引鍵資料行和來源資料表資訊。
傳回的資料表
這個常見的中繼資料會以結果集的形式傳回,結果中繼資料中每個資料行各有一個資料列。 每個資料列都會以下一節中所述的格式描述資料行的類型和 Null 性。 如果每個控制項路徑沒有第一個語句,則會傳回含有零個數據列的結果集。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
is_hidden | bit | 指定資料行是否為為了流覽資訊而新增的額外資料行,而不會實際出現在結果集中。 |
column_ordinal | int | 包含結果集中資料行的序數位置。 第一個資料行的位置會指定為 1。 |
name | sysname | 如果可以判斷名稱,則包含資料行的名稱。 否則為 Null。 |
is_nullable | bit | 如果資料行允許 Null,則包含值 1;如果資料行不允許 NUL,則為 0;如果無法判斷資料行允許 NUL,則為 1。 |
system_type_id | int | 包含資料行資料類型的system_type_id,如 sys.types 中所指定。 針對 CLR 類型,即使system_type_name資料行會傳回 Null,這個資料行也會傳回值 240。 |
system_type_name | nvarchar(256) | 包含資料類型名稱。 包含針對資料行資料類型指定的引數(例如長度、有效位數、小數位數)。 如果資料類型是使用者定義的別名類型,則會在這裡指定基礎系統類型。 如果是 CLR 使用者定義類型,則會在此資料行中傳回 Null。 |
max_length | smallint | 資料行的最大長度(以位元組為單位)。 -1 = 資料行資料類型為 Varchar(max) 、 Nvarchar(max) 、 Varbinary(max) 或 xml 。 針對 文字 資料行, max_length 值會是 16,或是sp_tableoption 「資料列中 的文字」所 設定的值。 |
有效位數 | tinyint | 如果以數值為基礎,則為數據行的有效位數。 否則傳回 0。 |
scale | tinyint | 如果以數值為基礎,則為數據行小數位數。 否則傳回 0。 |
collation_name | sysname | 如果以字元為基礎,則為數據行定序的名稱。 否則會傳回 Null。 |
user_type_id | int | 針對 CLR 和別名類型,包含資料行資料類型的user_type_id,如 sys.types 中所指定。 否則為 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 | 雜項 | 未描述的所有錯誤。 |
2 | 語法 | 批次中發生語法錯誤。 |
3 | CONFLICTING_RESULTS | 無法判斷結果,因為兩個可能的第一個語句之間發生衝突。 |
4 | DYNAMIC_SQL | 無法判斷結果,因為可能會傳回第一個結果的動態 SQL。 |
5 | CLR_PROCEDURE | 無法判斷結果,因為 CLR 預存程式可能會傳回第一個結果。 |
6 | CLR_TRIGGER | 無法判斷結果,因為 CLR 觸發程式可能會傳回第一個結果。 |
7 | EXTENDED_PROCEDURE | 無法判斷結果,因為擴充預存程式可能會傳回第一個結果。 |
8 | UNDECLARED_PARAMETER | 無法判斷結果,因為一或多個結果集資料行的資料類型可能相依于未宣告的參數。 |
9 | 遞 歸 | 無法判斷結果,因為批次包含遞迴語句。 |
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 函式來顯示資料庫中所有預存程式 AdventureWorks2022
結果集的中繼資料。
USE AdventureWorks2022;
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)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應