Come posso ottenere un elenco di nomi di colonne e tipi da un gruppo di risultati?
-
16-10-2019 - |
Domanda
Di 'ho un gruppo di risultati indietro dalla seguente query:
select *
from sys.database_files;
Per ogni gruppo di risultati, voglio essere in grado di interrogare i nomi delle colonne ei tipi in modo da poter poi creare le tabelle per memorizzare i risultati.
Che cosa è un buon modo di eseguire questa in T-SQL?
Soluzione
Come su:
SELECT *
INTO YourTableName
FROM sys.database_files;
Altri suggerimenti
Way in ritardo alla festa, ma appena ho pensato di citare un miglioramento metadati in SQL Server Denali che renderà molto più facile - non solo di ispezionare l'output di una query senza eseguirlo (non proprio lo stesso comportamento come < a href = "http://msdn.microsoft.com/en-us/library/ms173839.aspx" rel = "nofollow noreferrer"> SET FMTONLY ON
, che molte applicazioni usano oggi), ma anche per costruire le tabelle di destinazione dinamicamente (senza tutta l'analisi e lavoro caso coinvolto con tirando metadati sys.columns
). Ecco un esempio veloce - Avviso di non dover mai eseguire effettivamente la query per capire la forma del suo gruppo di risultati:
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;
Ci sono alcune limitazioni, naturalmente. Se si dispone di una query con più istruzioni, la frase "first_result_set" nel nome dovrebbe dare un indizio che si avrà solo ricevere informazioni sulla prima istruzione che restituisce i dati - non lo farà sosta in un SET NOCOUNT ON;
leader per esempio. Ci sono anche andando a essere problemi se si fa riferimento> nomi 3 parti direttamente o cercando di seguire una vista o sinonimo. Ma per la maggior parte dei casi d'uso che questo sarà una semplificazione benvenuto.
Ho bloggato dettagli molto di più a dicembre, anche descrivendo alcuni degli altri miglioramenti metadati: