Inicial > Banco de dados > Executando o mesmo script em vários bancos utilizando “sp_msforeachdb”

Executando o mesmo script em vários bancos utilizando “sp_msforeachdb”

Hoje tive mais um desafio a ser ultrapassado.
Trabalho em um projeto modelo SaaS aonde cada cliente tem seu próprio banco de dados. Estamos alterando um módulo que gera impacto no banco de dados e precisamos replicar o script para todos os clentes (cada cliente tem um banco de dados SQL separado).
A primeira idéia foi pegar todas as strings de conexão e montar um console que fizesse o trabalho. Pesquisando outras soluções, encontramos  “sp_msforeachdb“. Ela serve exatamente para o que preciso.
No meu caso, estou mudando o módulo de Login da aplicação e preciso buscar todos os usuários para inserí-los no novo módulo.
Segue o script:

create table #Administradores(
	[IdAdministrador] [int] ,
	[IdParceiro] [int] ,
	[Nome] [varchar](50) ,
	[Email] [varchar](250) ,
	[Login] [varchar](50) ,
	[Senha] [varchar](50) ,
	[FlagAtiva] [bit] ,
	[IdLojaFisica] [int],
	[dbName] [varchar](100)
)

EXECUTE sp_msforeachdb 'USE ? ;
IF EXISTS (SELECT 1 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_TYPE="BASE TABLE" 
    AND TABLE_NAME="Administrador")
insert into tempdb.#Administradores
SELECT [IdAdministrador]
      ,[IdParceiro]
      ,[Nome]
      ,[Email]
      ,[Login]
      ,[Senha]
      ,[FlagAtiva]
      ,[IdLojaFisica]
      ,DB_NAME()
  FROM [Administrador]'

select * from #Administradores 

drop table #Administradores

Esse script já retorna uma única tabela com todos os usuários, como se fosse uma tabela única. Basta criar uma procedure com o script acima e fazer o console utilizar a procedure.

Alguns links que ajudaram:

 

 

Categorias:Banco de dados
  1. Marcio
    06/03/2012 às 6:50

    Garoto, você é demais. Show!!! Como sempre digo, isso é uma solução dos DIABOS!

  1. No trackbacks yet.

Deixe um comentário