No SQL SERVER o
SP_HELP 'table_name'
retorna uma descrição de cada coluna incluindo seu tipo, tamanho, estado anulável etc. Estou usando esta informação para gerar automaticamente DTOs (classes) e mapeamentos.
Se eu quiser fazer isso para uma instrução SQL embutida (que inclui aliases, junções etc.), crio uma exibição temporariamente com a definição sendo minha instrução SQL e, em seguida, executo sp_help para essa exibição - o que me fornece tudo o que preciso. Depois disso, apenas excluo a visualização.
A questão:
Existe alguma outra maneira - mais simples de obter essas informações para SQL embutido - de preferência sem passar pela criação da exibição?
Sim. Todas as definições de objeto estão disponíveis no SQL Server como tabelas ou exibições. Essas fontes de metadados são conhecidas coletivamente como "o catálogo".
A maneira padrão do setor é por meio das visualizações do esquema de informações . No entanto, ouvi relatos de que a implementação do SQL Server pode ser um pouco difícil.
Há outro conjunto com nomes como sys.tables , sys.views etc. Esses são os mais usados.
Um conjunto de APIs de programa é publicado chamado de objetos de gerenciamento de servidor (SMO). Eles podem fornecer metadados ou objetos inteiros de script. Eles são o que o SSMS Object Explorer usa. A documentação pode ser concisa, mas se você perseverar, ela é muito poderosa. SMO pode ser chamado de C#, powershell ou outras linguagens.
Para criar o DTO para uma consulta arbitrária, eu faria referência às visualizações de catálogo para as colunas individuais retornadas. Francamente, sua técnica de criar uma visão transitória é tão boa quanto qualquer outra. Você também pode criar uma tabela temporária usando
select .. into #SomeName
. As tabelas temporárias se limpam quando saem do escopo. Da mesma forma, envolva a consulta em um proc armazenado temporário e use sys.dm_exec_describe_first_result_set .parece ser a melhor solução. Não há necessidade de embrulho.