2013-12-16 31 views
15

szukam sposób do czynienia z następującą sytuacją:Query w wielu bazach danych na tym samym serwerze

  1. Mamy serwera bazy danych z wielu baz danych na nim (wszystkie mają ten sam schemat, różne dane) .

  2. Szukamy sposobu na wyszukiwanie we wszystkich bazach danych (i do łatwej konfiguracji, ponieważ w każdej chwili można dodać więcej baz danych). Ten dostęp do danych musi być w czasie rzeczywistym.

Say, jako przykład, masz aplikację, która wstawia rozkazy - każda aplikacja posiada własny DB itd. Co mamy potem szukasz jest skutecznym sposobem dla pojedynczej aplikacji, aby następnie uzyskać dostęp do informacji o zamówieniu w wszystkie inne bazy danych w celu wysłania zapytania, a następnie podjęcia działań.

Moje wyszukiwanie do tej pory nie wykazały bardzo dużo, jednak myślę, że może po prostu nie być odpowiednie słowa kluczowe w celu znalezienia prawidłowej informacji ...

+0

Możesz zajrzeć do Service Broker – Sergio

+0

Jakiego języka chcesz używać? Z PHP można połączyć się z każdą bazą niezależnie. – Manolo

+0

@ManoloSalsas - Szukam uruchomienia pojedynczego zapytania, aby uzyskać dane z każdego DB. Poszukuje najczystszego sposobu robienia tego. Uzyskanie dostępu do każdego DB niezależnie nie będzie działać. – Paddy

Odpowiedz

9

To nie będzie najczystszym rozwiązanie nigdy, ale można zdefiniować widok na "bazie danych master" (jeśli jednostka bazy danych nie pozostaną niezmienione), która zawiera dane z poszczególnych baz danych i pozwala na wykonywanie zapytań na jednym źródle.

Na przykład ...

CREATE VIEW vCombinedRecords AS 
SELECT * FROM DB1.dbo.MyTable 
UNION ALL 
SELECT * FROM DB2.dbo.MyTable 

który pozwala robić ...

SELECT * FROM vCombinedRecords WHERE.... 

Gdy baz zmienić, wystarczy zaktualizować definicję widoku, aby zawierać nowe tabele.

+1

Miej to na uwadze, ale to trochę kłopot z utrzymaniem (dodawanie nowych baz danych) i zacznę też martwić się wydajnością (potencjalnie mówiąc o setkach związków tutaj). – Paddy

+1

Nie sądzę, że znajdziesz wydajne i łatwe w obsłudze rozwiązanie do wyszukiwania w wielu bazach danych. Indeksy są używane do wszystkiego, co ma wysoką wydajność, a te istnieją tylko na poziomie bazy danych. – Richard

15

Musisz podać nazwę bazy danych przed każdym obiekcie bazy danych.

jednej bazy danych:

SELECT * FROM [dbo].[myTable] 

Wiele dabases:

SELECT * FROM [DB01].[dbo].[myTable] 
UNION ALL 
SELECT * FROM [DB02].[dbo].[myTable] 
UNION ALL 
SELECT * FROM [DB03].[dbo].[myTable] 
+0

Dziękuję za odpowiedź, znam składnię trzech części i jak wyszukiwać w poszczególnych bazach danych, miałem nadzieję, że będzie to nieco bardziej elegancki sposób niż wiele takich związków. – Paddy

+0

Nie ma uniwersalnego wbudowanego sposobu, jak wykonać jeden skrypt w wielu bazach danych. Możesz mieć procedurę składowaną, która będzie dynamicznie konwertować łańcuchy w jednym dużym wyborze SQL, a następnie wykonać i za pomocą sp_sqlexec. – TcKs

3

Można zbudować unię dynamicznie:

select name from sys.databases 

a następnie sprawdzić, czy baza danych zawiera tabelę:

select name from [dbname_from_above].sys.tables where name = 'YourTable' 

który daje wszystkie bazy danych dla Unii. Możesz zbudować stronę klienta zapytań lub dynamiczny SQL.

+0

Interesujące podejście, ale nadal mam pewne obawy dotyczące skalowalności. – Paddy

Powiązane problemy