Utilizando TABELA TEMPORÁRIA e CURSOR para trabalhar com várias tabelas

#SQLSERVER

O exemplo abaixo utiliza uma tabela temporária e um cursor para executar uma consulta individual em cada tabela, salvar e mostrar o resultado.



--SELECT * FROM dbo.SYSOBJECTS WHERE XTYPE = 'U' AND NAME = 'nomeTabelaReal' /* Verifica se uma tabela real existe */
--SELECT * FROM Tempdb..SYSOBJECTS Where XTYPE='U' AND name = 'nomeTabelaTemp' /* Verifica se uma tabela temp existe */

if exists (SELECT * FROM Tempdb..SYSOBJECTS WHERE XTYPE = 'U' AND NAME like '#tabelahelp%')
begin
 print 'Tabela já existe.'
end
else   /* Cria tabela temporária chamada #tabelahelp */
 CREATE TABLE #tabelahelp (
  tabela nvarchar(100),
  registros int
 );

declare @col1 nvarchar(100) , @col2 nvarchar(100)  /* Parâmetros para o Cursor */
declare @cons nvarchar(100) , @qtd int

declare dados cursor scroll for     /* Declaração do Cursor (Array) */
/*O select abaixo retorna a lista de tabelas com as quais estou querendo trabalhar */
select distinct tabela,0 as registros from GCAMPOS where TABELA like 'SALUNO%' 

  open dados  
   fetch next from dados into @col1,@col2
      WHILE @@FETCH_STATUS = 0  /* Enquanto tiver dados executa a ação */
         begin              
  set @cons = 'select @qtd = count(*) from '+@col1;      /* Verifico a quantidade de itens na tabela */
  exec sp_executeSQl @cons, N'@qtd int output', @qtd output   
  set @col2 = (select @qtd);  /* Salvo o resultado na variável para inserir na tab temp */
  --print ('INSERT INTO #tabelahelp (tabela,registros) VALUES ('+@col1 + ',' +@col2 +')');
                /* Executa insert para salvar os dados na tabela temporária */
  EXEC ('INSERT INTO #tabelahelp (tabela,registros) VALUES ('''+@col1 + ''',''' +@col2 +''')');  
            fetch next from dados into  @col1,@col2
         end
    close dados   /* Fecha o Cursor */
    deallocate dados   /* Libera a memória utilizada */

select * from #tabelahelp   /* Visualiza dados da tabela criada */
  
--drop table #tabelahelp   /* Apaga tabela criada */


Obs.: Foi testado há algum tempo já...

Nenhum comentário:

Postar um comentário