none
Criar Tabelas Temporárias Dinamicamente dentro de um WHILE RRS feed

  • Discussão Geral

  • Criar Tabelas Temporárias Dinamicamente

    Hoje no trabalho me deparei com um problema onde eu tinha que repetir o mesmo select 40 vezes e a unica coisa que mudava no select era um número que ficava incrementando, exemplo

    select 1 into #t1 from #table1
    select 2 into #t2 from #table2

    e assim por diante.

    Quebrei a cabeça e depois de repetir o select 40 vezes manualmente, tentei fazer utilizando um WHILE, no começo não estava conseguindo pois o INTO não aceita uma variável como nome, exemplo INTO @variavel. Depois de muito tentar, consegui elaborar uma solução utilizando WHILE.

    NÃO SEI SE PESQUISEI ERRADO, MAS NÃO ENCONTREI NENHUMA SOLUÇÃO NO GOOGLE DA VIDA

    Logo, segue a minha solução, talvez ajude alguém que esteja procurando o mesmo exemplo.

    --==========================================
    --Cria uma tabela exemplo
    --==========================================
    create table ##sarah(
    	nome varchar(5)
    )
     
    declare @tabela varchar(10) = '##sarah', @text varchar(max), @i int = 0;
     
    --===================================================
    --preenche a tabela criada com um valor qualquer
    --=================================================
     
    while (@i<=10)
    	begin
    		set @i = @i + 1
    		insert ##sarah values ('teste')
    	end
     
    --=================================================
    --Cada Select feito dentro do WHILE vira uma tabela temporaria
    --================================================
     
    while (@i<10)
    	begin
    		set @i = @i + 1
    		set @text = 'select * into ' + @tabela+cast(@i as char)+' from ##sarah'
    		--print @text
    		exec (@text)
    	end
     
    --=========================================
    --SAÍDAS:
    --select * into ##sarah1   from ##sarah
    --select * into ##sarah2   from ##sarah
    --select * into ##sarah3   from ##sarah
    --select * into ##sarah4   from ##sarah
    --select * into ##sarah5   from ##sarah
    --select * into ##sarah6   from ##sarah
    --select * into ##sarah7   from ##sarah
    --select * into ##sarah8   from ##sarah
    --select * into ##sarah9   from ##sarah
    --select * into ##sarah10  from ##sarah
    --=================================================

    A grande sacada foi utilizar em vez de uma tabela temporária comum #, utilizei uma tabela temporária onde qualquer pessoa da sessão enxerga ela ##.

    Deve tomar cuidado ao utilizar o ## pois se já existir uma tabela temporária com o mesmo nome em qualquer sessão vai dar problema no código.

    Se Alguém souber uma outra forma de fazer isso, por favor compartilhe.

    Obrigada.

    Att,

    Sarah Porto

    sexta-feira, 6 de outubro de 2017 17:55