Frage

Sagen Sie, ich bekomme ein Ergebnis aus der folgenden Abfrage zurück:

select * 
from sys.database_files;

Für ein bestimmtes Ergebnis möchte ich die Spaltennamen und -Typen abfragen können, damit ich Tabellen erstellen kann, um die Ergebnisse zu speichern.

Was ist eine gute Möglichkeit, dies in T-SQL auszuführen?

War es hilfreich?

Lösung

Wie wäre es mit:

SELECT * 
INTO YourTableName 
FROM sys.database_files;

Andere Tipps

Weit zu spät zur Party, aber ich dachte nur, ich würde eine Metadatenverbesserung in SQL Server Denali erwähnen, die es viel einfacher macht - nicht nur die Ausgabe einer Abfrage ohne das Ausführen (nicht ganz das gleiche Verhalten wie SET FMTONLY ON, was viele Apps heute verwenden), aber auch Zieltabellen dynamisch erstellen (ohne all die Analysen und Fallarbeiten, sys.columns). Hier ist ein kurzes Beispiel: Beachten Sie, dass Sie die Abfrage nie ausführen müssen, um die Form seines Ergebnissets zu ermitteln:

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;

Natürlich gibt es einige Einschränkungen. Wenn Sie eine Abfrage mit mehreren Anweisungen haben, sollte die Phrase "first_result_set" im Namen einen Hinweis geben, dass Sie nur Informationen über die erste Anweisung erhalten Das gibt Daten zurück - Es wird nicht an einer Führung stehen bleiben SET NOCOUNT ON; zum Beispiel. Es wird auch Probleme geben, wenn Sie sich entweder direkt oder mit dem Versuch einer Ansicht oder Synonym beziehen. Bei den meisten Anwendungsfällen wird dies jedoch eine willkommene Vereinfachung sein.

Ich habe im Dezember viel mehr Details gebloggt und auch einige der anderen Metadatenverbesserungen beschrieben:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top