Как я могу получить список имен и типов столбцов из результатов?
-
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 частей непосредственно или пытаясь следовать представлению или синониму. Но для большинства вариантов использования это будет желанным упрощением.
В декабре я включил в блог намного больше подробностей, также описывая некоторые другие усовершенствования метаданных: