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_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 имеет тип bit. Если имеет значение 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. Для столбцов типа text значение max_length будет равно 16 или значению, заданному хранимой процедурой sp_tableoption 'text in row'. |
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 |
Описание |
---|---|---|
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.
Примеры
А.Возвращает метаданные со сведениями для просмотра и без них
В следующем примере создается хранимая процедура с именем 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)