Muitas vezes preciso escrever algo como o seguinte ao lidar com o SQL Server.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Mas criar uma tabela que tenha a sintaxe exata como resultado de um procedimento armazenado é uma tarefa tediosa. Por exemplo, o resultado de sp_helppublication tem 48 colunas! Gostaria de saber se existe alguma maneira fácil de fazer isso.
Obrigado.
Se o procedimento retornar apenas um conjunto de resultados e a opção de consultas distribuídas ad hoc estiver habilitada.
Ou você pode configurar um servidor vinculado de loopback e usá-lo.
No SQL Server 2012 e superior, você pode usar
sys.dm_exec_describe_first_result_set
localmente, supondo que o conjunto de resultados desejado seja o primeiro resultado:Resultado:
Observe que há uma limitação: se o procedimento armazenado criar tabelas #temp, a funcionalidade de metadados não funcionará. É por isso que eu não usei sp_who2. :-)
Não. O resultado de um procedimento armazenado pode variar muito: ele não foi projetado para sempre retornar exatamente um conjunto de resultados como um SELECT em algum objeto.
Você tem que executar CREATE TABLE
Eu escreveria um procedimento para gerar a tabela para mim:
Então chame com:
Observação : substitua 'YOUR_PROCEDURE_NAME_HERE' pelo nome de seu próprio procedimento armazenado.
Nota : Substitua YOUR_TABLE_NAME_HERE pelo nome da tabela de sua escolha.
O acima irá gerar algo assim: