none
Fazer Select/Insert em uma tabela mas de varios bancos diferentes. RRS feed

  • Pergunta

  • Bom dia,

    Primeiramente irei explicar meu problema: Precisei executar uma query que a partir de uma informação, eu poderia consultar quantos banco de dados possuem essa informação (valor), e caso não tenham essa informação, eu iria atualizar o banco de dados da mesma forma que fiz a consulta. (fazendo insert em cada banco de dados).

    A query abaixo verifica se a tabela do banco de dados possui a informação e se sim, retorna o nome do banco para uma variável do tipo tabela. No final eu mostro a relação de banco de dados e a quantidade do mesmo (que possuem a informação).

    DECLARE @tableTemp TABLE 
    		(
    		NomeBanco varchar(10)
    		)
    		
    declare @info nchar(8) = 'exemplo'
    
    
    insert into @tableTemp values 
      (CASE WHEN (select count(*) FROM [BD01].[dbo].[tableExemplo]where colunaExemplo like @info) <> 0	THEN 'BD01' ELSE '' END)
    , (CASE WHEN (select count(*) FROM [BD02].[dbo].[tableExemplo]where colunaExemplo like @info) <> 0	THEN 'BD02' ELSE '' END)
    , (CASE WHEN (select count(*) FROM [BD03].[dbo].[tableExemplo]where colunaExemplo like @info) <> 0	THEN 'BD03' ELSE '' END)
    , (CASE WHEN (select count(*) FROM [BD04].[dbo].[tableExemplo]where colunaExemplo like @info) <> 0	THEN 'BD04' ELSE '' END)
    , (CASE WHEN (select count(*) FROM [BD05].[dbo].[tableExemplo]where colunaExemplo like @info) <> 0	THEN 'BD05' ELSE '' END)
    
    
    select count(*) as 'Qt. de Banco' from @tableTemp	where NomeBanco <> ''
    select NomeBanco from @tableTemp	where NomeBanco <> ''	group by NomeBanco
    

    Bom, isso seria para algo "provisório", mas a quantidade de banco de dados vem aumentando. Gostaria de saber se é possível montar um query onde eu informasse a quantidade de banco de dados, e montar algo que fizesse um loop baseada em apenas um Select apenas alterando o nome do banco. Exemplo:

    selectcount(*)FROM[BD01].[dbo].[tableExemplo]wherecolunaExemplo like@info

    próxima query no loop.

    selectcount(*)FROM[BD02].[dbo].[tableExemplo]wherecolunaExemplo like@info

    Já tentei fazer algumas coisas, mas não tive sucesso.

    quarta-feira, 21 de outubro de 2015 14:35

Respostas

  • Use isso !!!

    EXECUTE master.sys.sp_MSforeachdb 'use [?];
    DECLARE @info NCHAR(8) = 'exemplo'; SELECT count(*) FROM [tableExemplo]
    WHERE colunaExemplo like @info '

    O que o sp_MSforeachdb faz é interar por todas as bases e executar o comando que vc coloca !!!
    Se vc precisar inteirar por todas as tabelas, vc usa sp_MSforeachtable


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    quarta-feira, 21 de outubro de 2015 15:27

Todas as Respostas

  • Use isso !!!

    EXECUTE master.sys.sp_MSforeachdb 'use [?];
    DECLARE @info NCHAR(8) = 'exemplo'; SELECT count(*) FROM [tableExemplo]
    WHERE colunaExemplo like @info '

    O que o sp_MSforeachdb faz é interar por todas as bases e executar o comando que vc coloca !!!
    Se vc precisar inteirar por todas as tabelas, vc usa sp_MSforeachtable


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    quarta-feira, 21 de outubro de 2015 15:27
  • Matou bonito Flávio, vou até anotar essa proc do SQL Server, muito útil!

    Valeu!

    quarta-feira, 21 de outubro de 2015 16:40
  • Cara muito obrigado, tive apenas que colocar o DECLARE dentro das aspas simples. Mas funcionou corretamente, em questão de quantidade de linha de código nem se fala. haha

    Valeu !!
    Abraços...

    quinta-feira, 22 de outubro de 2015 14:42
  • Cara muito obrigado, tive apenas que colocar o DECLARE dentro das aspas simples. Mas funcionou corretamente, em questão de quantidade de linha de código nem se fala. haha

    Valeu !!
    Abraços...

    Opa !!! Legal !!!

    Já ajustei o código !!! Abraço !


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 22 de outubro de 2015 14:59
  • Matou bonito Flávio, vou até anotar essa proc do SQL Server, muito útil!

    Valeu!

    Diego,

    Vale ressaltar que esta System Stored Procedure sp_MSforeachdb é uma da diversas Stored Procedures não documentadas pela Microsoft.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 22 de outubro de 2015 17:23