Поделиться через


sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Эта динамическая функция управления принимает в @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).

Соглашения о синтаксисе Transact-SQL

Синтаксис

  
sys.dm_exec_describe_first_result_set_for_object   
    ( @object_id , @include_browse_information )  

Аргументы

@object_id
Хранимая @object_id процедура Transact-SQL или триггер Transact-SQL. @object_id имеет тип int.

@include_browse_information
@include_browse_informationимеет бит типа. Если имеет значение 1, то каждый запрос анализируется так, как будто он имеет параметр FOR BROWSE для запроса. Возвращает дополнительные ключевые столбцы и сведения об исходной таблице.

Возвращаемая таблица

Эти общие метаданные возвращаются в виде результирующего набора с одной строкой для каждого столбца в результирующих метаданных. Каждая строка описывает тип и допустимость значений NULL в столбце в формате, описанном в следующем разделе. Если первая инструкция не существует для каждого пути управления, возвращается результирующий набор с нулем строк.

Имя столбца Тип данных Description
is_hidden bit Указывает, является ли столбец дополнительным, добавленным для целей просмотра данных, которые фактически не отражаются в результирующем наборе.
column_ordinal int Содержит порядковый номер столбца в результирующем наборе. Позиция первого столбца будет указана как 1.
name sysname Содержит имя столбца, если его можно определить. В противном случае значение равно NULL.
is_nullable bit Содержит значение 1, если столбец допускает значения NULL, значение 0, если столбец не допускает значения NULL, или значение -1, если не удалось определить, допускает ли столбец значения NULL.
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 или значение параметра "text in row", установленное процедурой sp_tableoption.
precision 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. Этот столбец возвратит NULL, если возвращаемый тип не связан с коллекцией схем XML.
xml_collection_database sysname Содержит базу данных, в которой определена коллекция схем XML, связанная с этим типом. Этот столбец возвратит NULL, если возвращаемый тип не связан с коллекцией схем XML.
xml_collection_schema sysname Содержит схему, в которой определена коллекция схем XML, связанная с этим типом. Этот столбец возвратит NULL, если возвращаемый тип не связан с коллекцией схем XML.
xml_collection_name sysname Содержит имя коллекции схем XML, связанной с этим типом. Этот столбец возвратит NULL, если возвращаемый тип не связан с коллекцией схем XML.
is_xml_document bit Возвращает значение 1, если возвращается тип данных XML, который гарантированно будет полным XML-документом (включая корневой узел), а не фрагментом XML. В противном случае возвращает 0.
is_case_sensitive bit Возвращает значение 1, если столбец относится к строковому типу с учетом регистра, либо значение 0 в противном случае.
is_fixed_length_clr_type bit Возвращает значение 1, если столбец относится к типу CLR с фиксированной длиной, либо значение 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. Возвращает значение NULL, если столбец отсутствует в списке ORDER BY либо список ORDER BY не может быть уникальным образом определен.
order_by_list_length smallint Длина списка ORDER BY. Возвращает NULL, если нет списка ORDER BY или если список ORDER BY нельзя однозначно определить. Обратите внимание на то, что это значение будет одним и тем же для всех строк, возвращаемых процедурой 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 Description
1 ПРОЧЕЕ Все ошибки, которые не описаны иным образом.
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 .

Примеры

А. Возвращает метаданные со сведениями для просмотра и без них

В следующем примере создается хранимая процедура с именем 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)