Select Into mais de uma vez com tabela temporaria no SQL Server

22/06/2021

5

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:

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

Wilson Rafael

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar