En SQL Server, hay algunas formas de obtener metadatos del conjunto de resultados de una consulta. Esto incluye el tipo de datos de las columnas devueltas por una consulta T-SQL.
En particular, el sys.dm_exec_describe_first_result_set
La función de gestión dinámica del sistema es una buena opción para esta tarea.
Ejemplo
Aquí hay un ejemplo para demostrar cómo usar sys.dm_exec_describe_first_result_set
para obtener información del tipo de datos sobre cada columna devuelta por una consulta T-SQL dada.
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set(
'select * from Clients',
null,
0);
Resultado:
+------------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |------------+------------------+--------------------+--------------+-------------+---------| | ClientCode | clientcode | varchar(8) | 8 | 0 | 0 | | FirstName | NULL | varchar(60) | 60 | 0 | 0 | | LastName | NULL | varchar(60) | 60 | 0 | 0 | +------------+------------------+--------------------+--------------+-------------+---------+
En este caso, se devuelven tres filas, cada una de las cuales representa una columna que devolvería la consulta que estoy analizando.
Es posible que haya notado que una de las columnas usa un alias de tipo de datos definido por el usuario llamado clientcode . Cuando crea un alias de tipo de datos definido por el usuario, lo basa en un tipo de sistema existente. Esto se refleja en el resultado anterior. Podemos ver que clientcode se basa en varchar(8) .
El sys.dm_exec_describe_first_result_set
La función devuelve muchas columnas, así que siéntete libre de incluir todas las columnas para ver si hay otras que te puedan resultar útiles. Consulte también Cómo sys.dm_exec_describe_first_result_set
Funciona para una explicación más detallada y más ejemplos.
También puede usar el sp_describe_first_result_set
procedimiento almacenado del sistema para devolver la misma información (utiliza el mismo algoritmo que sys.dm_exec_describe_first_result_set
).
Conjuntos de resultados de procedimientos almacenados
Si desea obtener el tipo de datos de las columnas devueltas por un procedimiento almacenado, puede usar sys.dm_exec_describe_first_result_set_for_object
función.
Esta función usa el mismo algoritmo que la anterior, pero la diferencia es que esta acepta la ID de un procedimiento almacenado o activador como su primer argumento (en lugar del lote T-SQL real).
Por lo tanto, podemos usarlo así:
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set_for_object(
OBJECT_ID('sp_BadDogs'),
0);
Resultado:
+---------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |---------+------------------+--------------------+--------------+-------------+---------| | DogId | NULL | int | 4 | 10 | 0 | | DogName | NULL | nvarchar(255) | 510 | 0 | 0 | | GoodDog | NULL | bit | 1 | 1 | 0 | +---------+------------------+--------------------+--------------+-------------+---------+
En este caso, utilicé el OBJECT_ID()
para devolver la ID del procedimiento almacenado, lo que me salvó de tener que saber la ID real.
Consulte Cómo funciona sys.dm_exec_describe_first_result_set_for_object para obtener más información y ejemplos de esta función.