Как я могу получить список имен и типов столбцов из результатов?

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

  •  16-10-2019
  •  | 
  •  

Вопрос

Скажите, что я получаю результат от следующего запроса:

select * 
from sys.database_files;

Для любого данного результата я хочу иметь возможность запросить имена и типы столбцов, чтобы затем создавать таблицы для хранения результатов.

Какой хороший способ выполнить это в T-SQL?

Это было полезно?

Решение

Как насчет:

SELECT * 
INTO YourTableName 
FROM sys.database_files;

Другие советы

Намного поздно до вечеринки, но просто подумал, что я упомянул об улучшении метаданных в SQL Server Denali, которое будет намного проще - не только для проверки вывода запроса без его запуска (не совсем то же поведение, что и поведение. SET FMTONLY ON, которые многие приложения используют сегодня), но также для динамического создания целевых таблиц (без всей работы и корпуса, связанных с вытягиванием метаданных из sys.columns) Вот быстрый пример - обратите внимание, что вам никогда не нужно запускать запрос, чтобы выяснить форму его результатов:

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;

Конечно, есть некоторые ограничения. Если у вас есть запрос с несколькими операторами, фраза «First_Result_set» в имени должна дать ключ, что вы получите только информацию о первом операторе это возвращает данные - это не остановится на ведущем SET NOCOUNT ON; Например. Также будут проблемы, если вы ссылаетесь на> имена из 3 частей непосредственно или пытаясь следовать представлению или синониму. Но для большинства вариантов использования это будет желанным упрощением.

В декабре я включил в блог намного больше подробностей, также описывая некоторые другие усовершенствования метаданных:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top