Question

Dis-je obtenir un retour resultset de la requête suivante:

select * 
from sys.database_files;

Pour tout donné de résultats, je veux être en mesure d'interroger les noms de colonnes et types afin que je puisse ensuite créer des tables pour stocker les résultats.

Qu'est-ce qu'un bon moyen de réaliser ceci dans T-SQL?

Était-ce utile?

La solution

Que diriez-vous:

SELECT * 
INTO YourTableName 
FROM sys.database_files;

Autres conseils

Way tard pour le parti, mais juste pensé que je vous signale une amélioration de métadonnées dans SQL Server Denali qui le rendra beaucoup plus facile - non seulement pour inspecter la sortie d'une requête sans l'exécuter (pas tout à fait le même comportement que < a href = "http://msdn.microsoft.com/en-us/library/ms173839.aspx" rel = "nofollow noreferrer"> SET FMTONLY ON , que beaucoup d'applications utilisent aujourd'hui), mais aussi de construire des tables cibles dynamique (sans tout le travail d'analyse et de cas impliqué dans les métadonnées de tirant sys.columns ). Voici un exemple rapide - Avis vous ne devez jamais exécuter réellement la requête pour déterminer la forme de son ResultSet:

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;

Il y a certaines limites, bien sûr. Si vous avez une requête avec plusieurs instructions, l'expression « first_result_set » au nom devrait donner un indice que vous ne recevrez des informations sur la première instruction qui renvoie les données - il ne nous arrêterons pas à un chef de file SET NOCOUNT ON; par exemple. Il y a aussi va avoir des problèmes si vous faites référence> soit les noms de 3 partie directement ou en essayant de suivre une vue ou un synonyme. Mais pour la majorité des cas d'utilisation, ce sera une simplification de bienvenue.

Je blogué beaucoup plus de détails en Décembre, décrivant également quelques-unes des autres améliorations de métadonnées:

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top