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?

È stato utile?

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:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top