Select Into mais de uma vez com tabela temporaria no SQL Server
22/06/2021
0
Oi bom dia a todos,
No trabalho tenho a questão de 3 cenarios de consulta:
1- Base Original
2- Base Histórico
3- Consulta em Ambas as Bases
só uma condição vai ser acessada a cada consulta
Dentro de cada consulta tem um select into #tabela_temp.
no caso da segunda condição fiz insert into# tabela_temp select
e no terceiro um union all
tenho uma tabela temporaria que vai ser alimentada com os dados da consulta (vale Lembrar que antes das condições tem um if pergutando
se há dados na temp caso sim a tabela é dropada)
no final do processo vai ser atualizada e retornar o resultado da consulta na tabela temporaria
Recebo o erro de que objeto #tabela_temp já existe
Minha pergunta é não há outro meio de utilizar tabela temporia por select into? já que se fizer um insert into select corro o risco da tabela não estar criada?
O codigo seria mais ou menos assim:
Grato pela ajuda
No trabalho tenho a questão de 3 cenarios de consulta:
1- Base Original
2- Base Histórico
3- Consulta em Ambas as Bases
só uma condição vai ser acessada a cada consulta
Dentro de cada consulta tem um select into #tabela_temp.
no caso da segunda condição fiz insert into# tabela_temp select
e no terceiro um union all
tenho uma tabela temporaria que vai ser alimentada com os dados da consulta (vale Lembrar que antes das condições tem um if pergutando
se há dados na temp caso sim a tabela é dropada)
no final do processo vai ser atualizada e retornar o resultado da consulta na tabela temporaria
Recebo o erro de que objeto #tabela_temp já existe
Minha pergunta é não há outro meio de utilizar tabela temporia por select into? já que se fizer um insert into select corro o risco da tabela não estar criada?
O codigo seria mais ou menos assim:
CREATE OR ALTER PROCEDURE teste_bases (@XMLPsrameters AS TEXT) AS BEGIN SET NOCOUNT ON */ PARAMETROS DO XML /* IF (ISNULLL(OBJECT_ID(''''TempDB..#tabela_temp''''),0)!=0) DROP TABLE #tabela_temp -- condição para Base original IF (@DtPosicaodDe > @MenorData AND @DtPosicaoAte > @MenorData ) BEGIN SELECT /* COLUNAS */ INTO #tabela_temp -- esse ok FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE END ELSE IF (@DtPosicaodDe < @MenorData AND @DtPosicaoAte < @MenorData ) BEGIN --INSERT INTO #tabela_temp SELECT /* COLUNAS */ INTO #tabela_temp -- erro aqui FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE END ELSE BEGIN -- INSERT INTO #tabela_temp SELECT /* COLUNAS */ INTO #tabela_temp -- erro aqui FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE UNION ALL -- INSERT INTO #tabela_temp SELECT /* COLUNAS */ INTO #tabela_temp -- erro aqui FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE END */ Atualizacao da tabela Temporaria #temp_table e apresentação do resultado da consulta da tabela Temporaria #tabela_temp /* SET NOCOUNT OFF ; RETURN 0; END GO
Grato pela ajuda
Wilson Rafael
Curtir tópico
+ 0
Responder
Posts
22/06/2021
Emerson Nascimento
separe o último trecho em duas instruções distintas, sem usar o UNION
CREATE OR ALTER PROCEDURE teste_bases (@XMLPsrameters AS TEXT) AS BEGIN SET NOCOUNT ON --PARAMETROS DO XML /* IF (ISNULLL(OBJECT_ID(''''TempDB..#tabela_temp''''),0)!=0) DROP TABLE #tabela_temp -- condição para Base original IF (@DtPosicaodDe > @MenorData AND @DtPosicaoAte > @MenorData) BEGIN SELECT /* COLUNAS */ INTO #tabela_temp FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE */ END ELSE IF (@DtPosicaodDe < @MenorData AND @DtPosicaoAte < @MenorData) BEGIN SELECT /* COLUNAS */ INTO #tabela_temp FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE */ END ELSE BEGIN SELECT /* COLUNAS */ INTO #tabela_temp FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE */ -- a instrução acima cria a tabela, mesmo que vazia -- a instrução abaixo somente popula a tabela INSERT INTO #tabela_temp SELECT /* COLUNAS */ FROM TABELA /* LIGAÇOES E CONDIÇÃO WHERE */ END */ /* Atualizacao da tabela Temporaria #temp_table e apresentação do resultado da consulta da tabela Temporaria #tabela_temp */ SET NOCOUNT OFF; RETURN 0; END GO
Responder
Clique aqui para fazer login e interagir na Comunidade :)