Fórum Criar Tabela Temporária com resultado de Exec #514572
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
Curtir tópico
+ 0Posts
24/03/2015
Marcos P
declare @comando varchar(max)
set @comando =
'select teste
into #TempTabela
from tabelaTeste
select * from #TempTabela'
execute(@comando)
Gostei + 0
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.
Gostei + 0
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.
Gostei + 0
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
Gostei + 0
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)
Gostei + 0
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)
Gostei + 0
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)
Gostei + 0
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.
Gostei + 0
24/03/2015
Marcos P
Se a solução que você encontrou resolve o problema... ótimo !
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)