Criar Tabela Temporária com resultado de Exec
24/03/2015
0
No sql server para criar uma tabela temporária dentro do meu conhecimento podemos
create table #TempTabela ( Teste numeric(15,0) )
ou
select teste into #TempTabela from tabelaTeste
o que preciso saber se é possível criar uma tabela temporária vindo o conteúdo de um comando execute no sql server exemplo
declare @comando varchar(max) set @comando = 'select * from tabelaTeste' -- Aqui preciso criar a temporária execute(@comando)
Lucas Ramos
Posts
24/03/2015
Marcos P
declare @comando varchar(max) set @comando = 'select teste into #TempTabela from tabelaTeste select * from #TempTabela' execute(@comando)
24/03/2015
Lucas Ramos
declare @comando varchar(max) set @comando = 'select teste into #TempTabela from tabelaTeste select * from #TempTabela' execute(@comando)
Boa Tarde Marcus
Obrigado pela atenção, mas o into dentro do comando não é possível, porque vai variar muito a query, vai vir no comando N tipos de consultas não tendo como ter um parâmetro para eu inserir isso no comando, essas consultas são utilizadas no ERP da empresa e não tenho como deixar o Into com a declaração da temporária.
24/03/2015
Lucas Ramos
declare @comando varchar(max) set @comando = 'select teste into #TempTabela from tabelaTeste select * from #TempTabela' execute(@comando)
Boa Tarde Marcus
Obrigado pela atenção, mas o into dentro do comando não é possível, porque vai variar muito a query, vai vir no comando N tipos de consultas não tendo como ter um parâmetro para eu inserir isso no comando, essas consultas são utilizadas no ERP da empresa e não tenho como deixar o Into com a declaração da temporária.
24/03/2015
Lucas Ramos
DECLARE @PCONSULTA VARCHAR(100) DECLARE @PTITULO VARCHAR(100) SET @PCONSULTA = 'NOME_DA_CONSUTLA' SET @PTITULO = 'TITULO da CONSULTA' DECLARE @COMANDO VARCHAR(MAX) SELECT @COMANDO = SQL FROM BANCO_DE_DADOS..CONSULTAS WHERE CONSULTA = @PCONSULTA if object_id('TempDb..#ParametrosConsultas') is not null drop table #ParametrosConsultas SELECT PARAMETRO into #ParametrosConsultas FROM BANCO_DE_DADOS..CONSULTAS_PARAMS WHERE CONSULTA = @PCONSULTA DECLARE @PARAMETRO VARCHAR(100) WHILE EXISTS(SELECT TOP 1 * FROM #PARAMETROSCONSULTAS) BEGIN SET @PARAMETRO = (SELECT TOP 1 PARAMETRO FROM #PARAMETROSCONSULTAS) DELETE FROM #PARAMETROSCONSULTAS WHERE PARAMETRO = @PARAMETRO SET @COMANDO = REPLACE(@COMANDO,':' + @PARAMETRO, 'NULL') END if object_id('TempDb..#ParametrosConsultas') is not null drop table #ParametrosConsultas DECLARE @TITULO VARCHAR(MAX) SET @TITULO = '' SELECT @TITULO = @TITULO + '<th>' + CAMPO + '</th>' FROM BANCO_DE_DADOS..CONSULTAS_CAMPOS WITH(NOLOCK) WHERE CONSULTA = @PCONSULTA ORDER BY ORDEM SET @TITULO = '<tr>' + @TITULO + '</tr>' DECLARE @HTML VARCHAR(MAX) SET @HTML = '<html><body><H3>' + @PTITULO + '</H3> <table border = 1>' /* Criar tabela temporária Início */ if object_id('TempDb..##TempConsHtmlFuncao') is not null drop table ##TempConsHtmlFuncao DECLARE @TABELA VARCHAR(MAX) DECLARE @CAMPOS VARCHAR(MAX) DECLARE @MIN_ORDEM INT DECLARE @MAX_ORDEM INT SET @CAMPOS = '' SELECT @MIN_ORDEM = MIN(ORDEM), @MAX_ORDEM = MAX(ORDEM) FROM BANCO_DE_DADOS..CONSULTAS_CAMPOS WHERE CONSULTA = @PCONSULTA SET @TABELA = 'CREATE TABLE ##TempConsHtmlFuncao (' SELECT @CAMPOS = @CAMPOS + CASE WHEN ORDEM = @MIN_ORDEM THEN ' ' ELSE ', ' END + CAMPO + ' varchar(max) ' FROM BANCO_DE_DADOS..CONSULTAS_CAMPOS WHERE CONSULTA = @PCONSULTA ORDER BY ORDEM SET @TABELA = @TABELA + @CAMPOS + ')' EXEC (@TABELA) /* Criar tabela temporária Fim */ insert into ##TempConsHtmlFuncao exec(@comando) /* Preenchendo o Xml Inicio*/ DECLARE @xml NVARCHAR(MAX) SET @XML = '' SET @CAMPOS = '' SELECT @CAMPOS = @CAMPOS + CASE WHEN ORDEM = @MIN_ORDEM THEN ' ' ELSE ', ' END + CAMPO + CASE WHEN ORDEM = @MAX_ORDEM THEN ' AS ''td''' ELSE ' AS ''td'',''''' END FROM BANCO_DE_DADOS..CONSULTAS_CAMPOS WHERE CONSULTA = @PCONSULTA ORDER BY ORDEM SET @CAMPOS = 'select CAST(( select ' + @campos + ' from ##TempConsHtmlFuncao FOR XML PATH(''tr''), ELEMENTS ) AS NVARCHAR(MAX)) as conteudo' if object_id('TempDb..#TempConteudo') is not null drop table #TempConteudo create table #TempConteudo( conteudo NVarchar(max)) insert into #TempConteudo (conteudo) exec(@CAMPOS) select @Xml = conteudo from #TempConteudo /* Preenchendo o Xml Fim*/ SET @HTML = @HTML + @XML + '</table></body></html>' select @HTML
24/03/2015
Marcos P
Algo como :
declare @NomeTemp varchar(50) set @NomeTemp = '#TempTabela' declare @comando varchar(max) set @comando = 'select teste into ' + @NomeTemp from tabelaTeste select * from #TempTabela' execute(@comando)
24/03/2015
Marcos P
declare @NomeTemp varchar(50) set @NomeTemp = '#TempTabela' declare @comando varchar(max) set @comando = 'select teste into ' + @NomeTemp + 'from tabelaTeste select * from #TempTabela' execute(@comando)
24/03/2015
Marcos P
declare @NomeTemp varchar(50) set @NomeTemp = '#TempTabela' declare @comando varchar(max) set @comando = 'select teste into ' + @NomeTemp + 'from tabelaTeste select * from ' + @NomeTemp execute(@comando)
24/03/2015
Lucas Ramos
Algo como :
declare @NomeTemp varchar(50) set @NomeTemp = '#TempTabela' declare @comando varchar(max) set @comando = 'select teste into ' + @NomeTemp from tabelaTeste select * from #TempTabela' execute(@comando)
Marcus, até que conseguiria fazer isso se as consultas fosse simples
mas as consultas que vão vir teoricamente não tenho o conhecimento do formato pode ser uma consulta simples ou complexa, eu vou pegar ela armazenada em um campo em uma tabela no banco de dados, pode ser
select * from teste
ou
select x.teste from ( select * from teste2 union all select * from teste3 )
Como podem ter consultas mais complexas, porém elas retornam no final com um select só trazendo o resultado e não inserem em nenhuma temporária, e não tendo uma estrutura padrão não tem como eu inserir para as mesmas colocar o resultado em uma temporária, eu consegui achar uma solução conforme mencionei antes no Post que já atende o que eu preciso, só vou organizar e otimizar o código, mas obrigado pela atenção.
24/03/2015
Marcos P
Se a solução que você encontrou resolve o problema... ótimo !
Clique aqui para fazer login e interagir na Comunidade :)