Select Into mais de uma vez com tabela temporaria no SQL Server
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
Curtidas 0
Respostas
Emerson Nascimento
22/06/2021
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
GOGOSTEI 0