sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)

Область применения: yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure YesУправляемый экземпляр 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).

Topic link iconСинтаксические обозначения в 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 в столбце в формате, описанном в следующем разделе. Если первая инструкция не существует для каждого пути управления, возвращается результирующий набор с нулем строк.

Имя столбца Тип данных Описание
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 или значение, заданное sp_tableoption "текст в строке".
precision tinyint Точность столбца, если он является числовым. В противном случае возвращается 0.
масштаб 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. См. список под замечаниями.

Remarks

В этой функции используется тот же алгоритм, что и в процедуре 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  

Б. Объединение функции 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)