Digamos que eu receba um conjunto de resultados da seguinte consulta:
select *
from sys.database_files;
Para qualquer conjunto de resultados, quero poder consultar os nomes e tipos de coluna para poder criar tabelas para armazenar os resultados.
Qual é uma boa maneira de fazer isso no T-SQL?
Muito tarde para a festa, mas pensei em mencionar um aprimoramento de metadados no SQL Server Denali que tornará muito mais fácil - não apenas inspecionar a saída de uma consulta sem executá-la (não exatamente o mesmo comportamento que
SET FMTONLY ON
, que muitos aplicativos uso hoje), mas também para criar tabelas de destino dinamicamente (sem toda a análise e trabalho de caso envolvido na extração de metadados desys.columns
). Aqui está um exemplo rápido - observe que você nunca precisa realmente executar a consulta para descobrir a forma de seu conjunto de resultados:Existem algumas limitações, é claro. Se você tiver uma consulta com várias instruções, a frase "first_result_set" no nome deve dar uma pista de que você só receberá informações sobre a primeira instrução que retornar dados - não parará em um líder,
SET NOCOUNT ON;
por exemplo. Também haverá problemas se você estiver fazendo referência a > nomes de 3 partes diretamente ou tentando seguir uma exibição ou sinônimo. Mas, para a maioria dos casos de uso, essa será uma simplificação bem-vinda.Publiquei no blog muito mais detalhes em dezembro, também descrevendo alguns dos outros aprimoramentos de metadados:
Que tal: