Compartir por


sys.dm_exec_describe_first_result_set (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

Esta función de gestión dinámica toma una sentencia Transact-SQL como parámetro y devuelve los metadatos del primer conjunto de resultados de la sentencia.

sys.dm_exec_describe_first_result_set devuelve la misma definición de conjunto de resultados que sys.dm_exec_describe_first_result_set_for_object y es similar a sp_describe_first_result_set.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sys.dm_exec_describe_first_result_set(@tsql , @params , @include_browse_information)

Argumentos

@tsql

Una o varias instrucciones Transact-SQL. El @tsql lote puede ser nvarchar(n) o nvarchar(max).

@params

@params proporciona una cadena de declaración para los parámetros del lote Transact-SQL, similar a sp_executesql. Los parámetros pueden ser nvarchar(n) o nvarchar(max).

Una sola cadena que contiene las definiciones de todos los parámetros que están incrustados en el @tsql lote. La cadena debe ser una constante Unicode o una variable Unicode. Cada definición de parámetro se compone de un nombre de parámetro y un tipo de datos. n es un marcador de posición que indica definiciones de parámetros adicionales. Cada parámetro especificado en stmt debe definirse en @params. Si la instrucción Transact-SQL o el lote de la instrucción no contiene parámetros, no se requiere @params . NULL es el valor predeterminado de este parámetro.

@include_browse_information

Si se establece en 1, cada consulta se analiza como si tuviera una FOR BROWSE opción en la consulta. El resultado incluye columnas clave adicionales e información sobre tablas de fuente.

Tabla devuelta

La función devuelve estos metadatos comunes como conjunto de resultados. Cada fila corresponde a una columna en los metadatos de resultados y describe el tipo y la nulidad de la columna en el formato mostrado en la siguiente tabla. Si la primera sentencia no existe para cada ruta de control, la función devuelve un conjunto de resultados con cero filas.

Nombre de la columna Tipo de datos Descripción
is_hidden bit Especifica que la columna es una columna extra, añadida para navegar e informar, que en realidad no aparece en el conjunto de resultados.
column_ordinal int Contiene la posición ordinal de la columna en el conjunto de resultados. La posición de la primera columna se especifica como 1.
name sysname Contiene el nombre de la columna si se puede determinar uno. Si no, es NULL.
is_nullable bit Contiene los siguientes valores:

Retorna 1 si la columna permite NULL valores.

Devuelve 0 si la columna no permite NULL valores.

Retorna 1 si no se puede determinar que la columna permite NULL valores.
system_type_id int Contiene el system_type_id de del tipo de dato columna especificado en sys.types. Para tipos CLR, aunque la system_type_name columna devuelve NULL, esta columna devuelve 240.
system_type_name nvarchar(256) Contiene el nombre y los argumentos (como length, precision y scale) especificados para el tipo de datos de la columna.

Si el tipo de datos es un tipo de alias definido por el usuario, el tipo de sistema subyacente se especifica aquí.

Si el tipo de dato es un tipo CLR definido por el usuario, NULL se devuelve en esta columna.
max_length smallint Longitud máxima de la columna, en bytes.

-1 = El tipo de datos de columna es varchar(max), nvarchar(max), varbinary(max)o xml.

Para columnas de texto , el max_length valor es 16, o el valor conjunto por sp_tableoption 'text in row'.
precision tinyint Precisión de la columna, si está basada en números. De lo contrario, devuelve 0.
scale tinyint La escala de la columna se basa en valores numéricos. De lo contrario, devuelve 0.
collation_name sysname Nombre de la intercalación de la columna, si está basada en caracteres. De lo contrario, devuelve NULL.
user_type_id int Para los tipos clR y alias, contiene el user_type_id del tipo de datos de la columna tal como se especifica en sys.types. De lo contrario, es NULL.
user_type_database sysname Para los tipos de alias y CLR, contiene el nombre de la base de datos en la que se define el tipo. De lo contrario, es NULL.
user_type_schema sysname Para los tipos de alias y CLR, contiene el nombre del esquema en el que se define el tipo. De lo contrario, es NULL.
user_type_name sysname Para los tipos de alias y CLR, contiene el nombre del tipo. De lo contrario, es NULL.
assembly_qualified_type_name nvarchar(4000) Para los tipos CLR, devuelve el nombre del ensamblado y la clase que definen el tipo. De lo contrario, es NULL.
xml_collection_id int Contiene el xml_collection_id del tipo de datos de la columna tal como se especifica en sys.columns. Esta columna devuelve NULL si el tipo devuelto no está asociado a una colección de esquemas XML.
xml_collection_database sysname Contiene la base de datos en la que se define la colección de esquema XML asociado a este tipo. Esta columna devuelve NULL si el tipo devuelto no está asociado a una colección de esquemas XML.
xml_collection_schema sysname Contiene el esquema en el que se define la colección de esquema XML asociado a este tipo. Esta columna devuelve NULL si el tipo devuelto no está asociado a una colección de esquemas XML.
xml_collection_name sysname Contiene el nombre de la colección de esquema XML asociado a este tipo. Esta columna devuelve NULL si el tipo devuelto no está asociado a una colección de esquemas XML.
is_xml_document bit Retorna 1 si el tipo de dato retornado es XML y ese tipo está garantizado como un documento XML completo (incluyendo un nodo raíz, en lugar de un fragmento XML). De lo contrario, devuelve 0.
is_case_sensitive bit Devuelve 1 si la columna es de tipo cadena distinguida a mayúsculas y mayúsculas. Devuelva 0 si no lo es.
is_fixed_length_clr_type bit Retorna 1 si la columna es de tipo CLR de longitud fija. Devuelva 0 si no lo es.
source_server sysname Nombre del servidor de origen (si se origina desde un servidor remoto). El nombre se asigna tal como aparece en sys.servers. Devuelve NULL si la columna se origina en el servidor local o si no se puede determinar en qué servidor se origina. Solo se rellena si se solicita buscar información.
source_database sysname Nombre de la base de datos de origen que devuelve la columna en este resultado. Devuelve NULL si no se puede determinar la base de datos. Solo se rellena si se solicita buscar información.
source_schema sysname Nombre del esquema de origen que devuelve la columna en este resultado. Devuelve NULL si no se puede determinar el esquema. Solo se rellena si se solicita buscar información.
source_table sysname Nombre de la tabla de origen que devuelve la columna en este resultado. Devuelve NULL si no se puede determinar la tabla. Solo se rellena si se solicita buscar información.
source_column sysname Nombre de la columna de origen que devuelve la columna de resultado. Devuelve NULL si no se puede determinar la columna. Solo se rellena si se solicita buscar información.
is_identity_column bit Devuelve 1 si la columna es una columna identidad y 0 si no. Devuelve NULL si no se puede determinar que la columna es una columna de identidad.
is_part_of_unique_key bit Devuelve 1 si la columna forma parte de un índice único (incluyendo restricciones únicas y primarias) y 0 si no lo es. Devuelve NULL si no se puede determinar que la columna forma parte de un índice único. Solo se rellena si se solicita buscar información.
is_updateable bit Devuelve 1 si la columna es actualizable y 0 si no. Devuelve NULL si no se puede determinar que la columna se puede actualizar.
is_computed_column bit Devuelve 1 si la columna es una columna calculada y 0 si no. Retorna NULL si no se puede determinar si la columna es una columna calculada.
is_sparse_column_set bit Retorna 1 si la columna es escasa y 0 si no. Retorna NULL si no se puede determinar que la columna forma parte de un conjunto de columnas dispersas.
ordinal_in_order_by_list smallint La posición de esta columna está en ORDER BY lista. Retorna NULL si la columna no aparece en la ORDER BY lista, o si la ORDER BY lista no puede determinarse de forma única.
order_by_list_length smallint La longitud de la ORDER BY lista. NULL se devuelve si no ORDER BY hay lista o si la ORDER BY lista no puede determinarse de forma única. Este valor es el mismo para todas las filas devueltas por sp_describe_first_result_set.
order_by_is_descending smallint ordinal_in_order_by_list Si no NULLes , la order_by_is_descending columna informa de la dirección de la ORDER BY cláusula para esta columna. De lo contrario, notifica NULL.
error_number int Contiene el número de error devuelto por la función. Si no se produjo ningún error, la columna contiene NULL.
error_severity int Contiene la gravedad devuelta por la función. Si no se produjo ningún error, la columna contiene NULL.
error_state int Contiene el mensaje de estado devuelto por la función . Si no se produjo ningún error, la columna contiene NULL.
error_message nvarchar(4096) Contiene el mensaje que devuelve la función. Si no se produjo ningún error, la columna contiene NULL.
error_type int Contiene un entero que representa el error que se va a devolver. Asigna a error_type_desc. Vea la lista bajo las notas.
error_type_desc nvarchar(60) Contiene una cadena corta en mayúsculas que representa el error que se va a devolver. Asigna a error_type. Vea la lista bajo las notas.

Comentarios

Esta función utiliza el mismo algoritmo que sp_describe_first_result_set. Para más información, véase sp_describe_first_result_set.

La siguiente tabla enumera los tipos de error y sus descripciones.

error_type error_type Descripción
1 MISC Todos errores que no están descritos de otra manera.
2 SYNTAX Se produjo un error de sintaxis en el lote.
3 CONFLICTING_RESULTS El resultado no pudo determinarse debido a un conflicto entre dos posibles primeras afirmaciones.
4 DYNAMIC_SQL El resultado no se pudo determinar debido a SQL dinámico que podría devolver el primer resultado.
5 CLR_PROCEDURE El resultado no pudo determinarse porque un procedimiento almacenado CLR podría potencialmente devolver el primer resultado.
6 CLR_TRIGGER El resultado no se pudo determinar porque un disparador CLR podría devolver el primer resultado.
7 EXTENDED_PROCEDURE El resultado no podía determinarse porque un procedimiento almacenado extendido podría potencialmente devolver el primer resultado.
8 UNDECLARED_PARAMETER El resultado no pudo determinarse porque el tipo de dato de una o más columnas del conjunto de resultados potencialmente depende de un parámetro no declarado.
9 RECURSION El resultado no pudo determinarse porque el lote contiene una sentencia recursiva.
10 TEMPORARY_TABLE El resultado no se pudo determinar porque el lote contiene una tabla temporal y no está soportado por sp_describe_first_result_set .
11 UNSUPPORTED_STATEMENT El resultado no pudo determinarse porque el lote contiene una sentencia que no está soportada por sp_describe_first_result_set (por ejemplo, FETCH, REVERT, etc.).
12 OBJECT_TYPE_NOT_SUPPORTED El @object_id 'pasado a la función' no está soportado (es decir, no es un procedimiento almacenado).
13 OBJECT_DOES_NOT_EXIST El @object_id 'pasado a la función' no aparece en el catálogo del sistema.

Permisos

Requiere permiso para ejecutar el argumento @tsql .

Ejemplos

Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.

Puedes adaptar los ejemplos del artículo de sp_describe_first_result_set para usar sys.dm_exec_describe_first_result_set.

A Información de devolución sobre un estado de Transact-SQL único

El código siguiente devuelve información sobre los resultados de una instrucción 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. Información de devolución sobre un procedimiento

El siguiente ejemplo crea un procedimiento almacenado llamado pr_TestProc que devuelve dos conjuntos de resultados. Luego el ejemplo demuestra que sys.dm_exec_describe_first_result_set devuelve información sobre el primer conjunto de resultados en el procedimiento.

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);

C. Devolver metadatos de un lote que contiene múltiples sentencias

En el ejemplo siguiente se evalúa un lote que contiene dos instrucciones Transact-SQL. El conjunto de resultados describe el primer conjunto de resultados devuelto.

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;