Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
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;