¿Cómo puedo obtener una lista de nombres de columna y tipos de un conjunto de resultados?

dba.stackexchange https://dba.stackexchange.com/questions/2743

  •  16-10-2019
  •  | 
  •  

Pregunta

Say recibo una vuelta de resultados de la consulta siguiente:

select * 
from sys.database_files;

Para cualquier conjunto de resultados dado, quiero ser capaz de consultar los nombres de columna y tipos así que pueden crear tablas para almacenar los resultados.

¿Qué es una buena manera de realizar esto en T-SQL?

¿Fue útil?

Solución

¿Qué hay de:

SELECT * 
INTO YourTableName 
FROM sys.database_files;

Otros consejos

Camino tarde a la fiesta, pero sólo pensé que me gustaría mencionar una mejora de metadatos en SQL Server Denali que hará que sea mucho más fácil - no sólo para inspeccionar el resultado de una consulta sin ejecutarlo (no es exactamente el mismo comportamiento que < a href = "http://msdn.microsoft.com/en-us/library/ms173839.aspx" rel = "nofollow noreferrer"> SET FMTONLY ON , que muchas de las aplicaciones utilizan hoy en día), sino también a las tablas de destino de construcción dinámicamente (sin todo el análisis sintáctico y el caso trabajo involucrado con la tracción de metadatos de sys.columns ). Aquí está un ejemplo rápido - Anuncio que nunca tenga que ejecutar realmente la consulta de averiguar la forma de su conjunto de resultados:

DECLARE @sql NVARCHAR(MAX) = N'SELECT * FROM sys.database_files';

SELECT name, system_type_name, collation_name
    FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0)
    ORDER BY column_ordinal;

Existen algunas limitaciones, por supuesto. Si desea realizar una consulta con múltiples declaraciones, la frase "first_result_set" en el nombre debería dar una pista que sólo recibirá información sobre la primera instrucción que devuelve datos - no se detendrá en una SET NOCOUNT ON; líder por ejemplo. También va a haber problemas si se hace referencia> nombres de 3 partes, ya sea directamente o por tratar de seguir una vista o sinónimo. Sin embargo, para la mayoría de los casos de uso que esta será una simplificación de bienvenida.

Me escribió en su blog muchos más detalles en diciembre, también la descripción de algunas de las otras mejoras de metadatos:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top