Pesquisar em várias bases de dados no mesmo servidor

Estou à procura de uma forma de lidar com a seguinte situação:
  1. temos um servidor de banco de dados com várias bases de dados nele (todos têm o mesmo esquema, dados diferentes).

  2. estamos à procura de uma maneira de consultar em todas as bases de dados (e para que seja fácil de configurar, como mais bases de dados podem ser adicionados a qualquer momento). Este acesso de dados deve ser em tempo real.

Como exemplo, você tem uma aplicação que insere ordens - cada uma a aplicação tem seu próprio DB, etc. O que procuramos, então, é uma forma eficiente de uma única aplicação acessar a informação de pedido em todas as outras bases de dados, a fim de questioná-la e, posteriormente, agir.

As minhas pesquisas até à data não revelaram muito, no entanto acho que posso estar a perder as palavras-chave apropriadas para encontrar a informação correcta...

Author: Paddy, 2013-12-16

3 answers

Não vai ser a solução mais limpa de sempre, mas você pode definir uma vista em uma "base de dados mestre" (se suas bases de dados individuais não vão ficar constantes) que inclui os dados das bases de dados individuais, e permite que você execute consultas em uma única fonte.

Por exemplo...

CREATE VIEW vCombinedRecords AS
SELECT * FROM DB1.dbo.MyTable
UNION ALL
SELECT * FROM DB2.dbo.MyTable
O que te permite fazer...
SELECT * FROM vCombinedRecords WHERE....

Quando as suas bases de dados mudam, basta actualizar a definição de vista para incluir as novas tabelas.

 9
Author: Richard, 2013-12-16 12:59:02

Deve indicar o nome da base de dados antes de qualquer objecto da base de dados.

Base de dados única:

SELECT * FROM [dbo].[myTable]

Múltiplas dabases:

SELECT * FROM [DB01].[dbo].[myTable]
UNION ALL
SELECT * FROM [DB02].[dbo].[myTable]
UNION ALL
SELECT * FROM [DB03].[dbo].[myTable]
 16
Author: TcKs, 2013-12-16 12:50:52

Podes construir a União dinamicamente:

select name from sys.databases

E depois verificar se a base de dados tem a tabela:

select name from [dbname_from_above].sys.tables where name = 'YourTable'
Isso dá-vos todas as bases de dados da União. Você pode construir o lado cliente da consulta ou em SQL dinâmico.
 4
Author: Andomar, 2013-12-16 13:00:46