Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Эта динамическая функция управления принимает оператор Transact-SQL в качестве параметра и возвращает метаданные для первого набора результатов этого оператора.
sys.dm_exec_describe_first_result_set возвращает то же определение результатов, что и sys.dm_exec_describe_first_result_set_for_object , и похоже на sp_describe_first_result_set.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sys.dm_exec_describe_first_result_set(@tsql , @params , @include_browse_information)
Аргументы
@tsql
Одна или несколько инструкций Transact-SQL. Партия @tsql может быть nvarchar(n) или nvarchar(max).
@params
@params предоставляет строку объявления параметров для Transact-SQL batch, аналогично sp_executesql. Параметры могут быть nvarchar(n) или nvarchar(max).
Одна строка, содержащая определения всех параметров, встроенных в @tsql пакет. Строка должна представлять собой константу в Юникоде либо переменную в этом же формате. Определение каждого параметра состоит из имени параметра и типа данных.
n — это заполнитель, указывающий дополнительные определения параметров. Каждый параметр, указанный в stmt, должен быть определен в @params. Если инструкция Transact-SQL или пакет в инструкции не содержит параметров, @params не требуется.
NULL — значение по умолчанию для этого параметра.
@include_browse_information
Если установлено значение 1, каждый запрос анализируется так, будто в нём есть FOR BROWSE опция. В результате добавлены дополнительные ключевые столбцы и информация из исходной таблицы.
Таблица возвращена
Функция возвращает эти общие метаданные в виде набора результатов. Каждая строка соответствует столбцу в метаданных результатов и описывает тип и нулевость столбца в формате, показанном в следующей таблице. Если первый оператор не существует для каждого управляющего пути, функция возвращает набор результатов с нулём строк.
| Имя столбца | Тип данных | 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, или значение, заданное .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 | Если это 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.
В следующей таблице перечислены типы ошибок и их описания.
error_type |
error_type |
Description |
|---|---|---|
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_TYPE_NOT_SUPPORTED |
Передача @object_id в функцию не поддерживается (то есть это не сохранённая процедура). |
13 |
OBJECT_DOES_NOT_EXIST |
@object_id Передача функции не встречается в системном каталоге. |
Разрешения
Требуется разрешение на выполнение аргумента @tsql .
Примеры
Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
Вы можете адаптировать примеры из sp_describe_first_result_set статьи, чтобы использовать sys.dm_exec_describe_first_result_set.
А. Информация о выписке по одному Transact-SQL
Следующий код возвращает сведения о результатах инструкции Transact-SQL.
USE @AdventureWorks2025;
SELECT *
FROM sys.dm_exec_describe_first_result_set (
N'SELECT object_id, name, type_desc FROM sys.indexes', null, 0
);
B. Информация о процедуре возврата
Следующий пример создаёт сохранённую процедуру с именем pr_TestProc , которая возвращает два набора результатов. Тогда пример показывает, что sys.dm_exec_describe_first_result_set возвращает информацию о первом наборе результатов в процедуре.
USE @AdventureWorks2025;
GO
CREATE PROC Production.TestProc
AS
SELECT Name, ProductID, Color
FROM Production.Product;
SELECT Name, SafetyStockLevel, SellStartDate
FROM Production.Product;
GO
SELECT *
FROM sys.dm_exec_describe_first_result_set('Production.TestProc', NULL, 0);
В. Возвращайте метаданные из пакета, содержащего несколько операторов
В следующем примере вычисляется пакет, содержащий две инструкции Transact-SQL. Результирующий набор описывает первый возвращенный результирующий набор.
USE AdventureWorks2025;
GO
SELECT *
FROM sys.dm_exec_describe_first_result_set(
N'SELECT CustomerID, TerritoryID, AccountNumber FROM Sales.Customer WHERE CustomerID = @CustomerID;SELECT * FROM Sales.SalesOrderHeader;',
N'@CustomerID int',
0
) AS a;