Ir para conteúdo
Fórum Script Brasil
  • 0

Query para retornar relação de tabelas não vazias no banco de dados


Alecsandro

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0

Meu amigo... não sei se o sql tem uma função/campo pronta pra isto. Pesquisei na net e não encontrei nada.... :.(

Resolvi fazer um script que retornar o resultado que deseja, ok?

Seguinte: criei uma temporária de instância, inseri os nomes de tabelas criadas no Banco de Dados. Declarei algumas variáveis e monto dinamicamente o script dentro de uma variável destas. Faço a execução do string, gravando na temporária. Após execução, você dá um select na temporária. Vai encontrar as tabelas do Banco, com a quantidade de inserção de cada uma delas. Quando fechar a instância, a tabela será eliminada da memória.

Espero que ajude. Roda aí depois me fala se deu certo!!! :.)

-- cria a tabela. Roda 1 vez só. Se tiver q rodar de novo, tem que dropar.

create table #Tabelas (NomeTabela varchar(100), QtdaInsercoes int)

-- insere as tabelas do BD na temporaria

insert into #Tabelas (NomeTabela)

select name from sysobjects where xtype='U' and uid=1

-- carga da quantidade de inserções nas tabelas.

-- rodar o bloco todo

declare @Script as varchar(1000)

declare @NomeTabela as varchar(100)

set @NomeTabela = (select top 1 NomeTabela from #Tabelas where QtdaInsercoes is null)

while @NomeTabela is not null

Begin

set @Script = ('update #Tabelas set QtdaInsercoes=(select count(*) from ' + @NomeTabela + ')

where NomeTabela = ''' + @NomeTabela + '''')

exec (@Script)

set @NomeTabela = (select top 1 NomeTabela from #Tabelas where QtdaInsercoes is null)

End

-- até aqui.

-- Verificar a carga da tabela

select * from #Tabelas

Link para o comentário
Compartilhar em outros sites

  • 0

Achei uma query que funcionaou bem:

DECLARE @NOME_DA_TABELA VARCHAR(40), @COMANDO VARCHAR(4000)

CREATE TABLE #QTDE_REGISTROS_TABELAS (NOME_TABELA VARCHAR(200), TOTAL_REGISTROS INT)

DECLARE MEU_CURSOR CURSOR FOR

--

--Seleciona todas as tabelas do BD

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

OPEN MEU_CURSOR

FETCH NEXT FROM MEU_CURSOR

INTO @NOME_DA_TABELA

WHILE @@FETCH_STATUS = 0

BEGIN

--

--Monta comando dinâmico para contar o número de registros e

--insere em tabela

SET @COMANDO = 'INSERT INTO #QTDE_REGISTROS_TABELAS (NOME_TABELA, TOTAL_REGISTROS) SELECT ''' + @NOME_DA_TABELA + ''', COUNT(*) FROM ' + @NOME_DA_TABELA

--PRINT @COMANDO

EXEC(@COMANDO)

FETCH NEXT FROM MEU_CURSOR

INTO @NOME_DA_TABELA

END

CLOSE MEU_CURSOR

DEALLOCATE MEU_CURSOR

--

SELECT * FROM #QTDE_REGISTROS_TABELAS

DROP TABLE #QTDE_REGISTROS_TABELAS

--

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Alecsandro.

Ok. Esta query possui a mesma lógica q te passei. A diferença que crio a tabela temporária com as tabelas da base e "updato" com a quantidade de registros. Nesta que postou, são realizadas as duas coisas em uma única execução.

UMA DICA: prefira utilizar loops (while) ao invés de cursores, pois estes são mais "pesados" no processamento.

Até mais.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...