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 possui 48 colunas! Quero saber se existe alguma maneira fácil de fazer isso.
Obrigado.
sql-server
t-sql
stored-procedures
Apenas um aprendiz
fonte
fonte
Respostas:
Se o procedimento retornar apenas um conjunto de resultados e a opção de consultas distribuídas ad hoc estiver ativada.
Ou você pode configurar um servidor vinculado a loopback e usá-lo.
fonte
SET FMT_ONLY ON
?No SQL Server 2012 e acima, você pode usar
sys.dm_exec_describe_first_result_set
localmente, supondo que o conjunto de resultados que você procura seja o primeiro resultado:Resultado:
Observe que há uma limitação: se o procedimento armazenado criar #temp tables, a funcionalidade de metadados não funcionará. É por isso que eu não usei sp_who2. :-)
fonte
SELECT @sql += *expression*
sintaxe está documentada em algum lugar? deveORDER BY
ser incluído para torná-lo estável?ORDER BY
é realmente conhecido por tornar isso menos estável . Se você deseja obter os resultados em uma ordem previsível, useFOR XML PATH
ou, se houver uma versão suficientemente nova do SQL ServerSTRING_AGG
,.+=
... string+=
está documentada aqui . Mas obrigada!Não. O resultado de um procedimento armazenado pode variar bastante: ele não foi projetado para sempre retornar exatamente um conjunto de resultados como um SELECT em algum objeto.
Você precisa executar CREATE TABLE
fonte
Eu escreveria um procedimento para gerar a tabela para mim:
Em seguida, chame-o com:
Nota : Substitua 'YOUR_PROCEDURE_NAME_HERE' pelo nome do seu próprio procedimento armazenado.
Nota : Substitua YOUR_TABLE_NAME_HERE pelo nome da tabela de sua escolha.
O acima irá gerar algo como isto:
fonte