2013-12-16 16 views
15

Cerco un modo di trattare con la seguente situazione:query su più database sullo stesso server

  1. abbiamo un server database con più database su di esso (hanno tutti lo stesso schema, dati diversi) .

  2. Siamo alla ricerca di un modo per eseguire query su tutti i database (e per semplificare la configurazione, poiché è possibile aggiungere più database in qualsiasi momento). Questo accesso ai dati deve essere in tempo reale.

Dire, ad esempio, si dispone di un'applicazione che inserisce gli ordini - ogni applicazione ha il proprio DB ecc Quello che stiamo quindi cercando è un modo efficace per una singola applicazione per poi accedere alle informazioni in ordine tutti gli altri database per interrogarlo e successivamente eseguirlo.

mie ricerche fino ad oggi non hanno rivelato molto, ma penso che potrebbe essere solo manca le parole chiave appropriate al fine di trovare le informazioni corrette ...

+0

Si consiglia di dare un'occhiata a Service Broker – Sergio

+0

Che lingua si desidera utilizzare? Con PHP puoi connetterti a ciascun database in modo indipendente – Manolo

+0

@ManoloSalsas - Sto cercando di eseguire una singola query per ottenere i dati da ciascun DB. Alla ricerca del modo più pulito per farlo. Accedere a ciascun DB in modo indipendente non funzionerà. – Paddy

risposta

9

Non sarà la soluzione più pulita in assoluto, ma si potrebbe definire una vista su un "database Master" (se il vostro individuo i database non resteranno costanti) che include i dati dei singoli database e consente di eseguire query su un'unica fonte.

Per esempio ...

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

che ti permette di fare ...

SELECT * FROM vCombinedRecords WHERE.... 

Quando i database cambiano, basta aggiornare la definizione della vista per includere le nuove tabelle.

+1

Ho questo in mente, ma è un po 'un problema di manutenzione (aggiungendo nuovi database) e inizierei anche a preoccuparmi delle prestazioni (potenzialmente parlando di centinaia di sindacati qui). – Paddy

+1

Non credo che troverai una soluzione ad alte prestazioni e facilmente gestibile per la ricerca su più database. Gli indici sono usati per qualsiasi cosa ad alte prestazioni, e questi esistono solo a livello di database. – Richard

15

È necessario specificare il nome del database prima di ogni oggetto di database.

banca dati singola:

SELECT * FROM [dbo].[myTable] 

multipli dabases:

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

Grazie per la risposta, sono a conoscenza della sintassi a tre parti e di come eseguire una query tra i singoli DB, stavo solo sperando in un modo leggermente più elegante rispetto a più sindacati come questo. – Paddy

+0

Non esiste un modo integrato universale, come eseguire uno script su più database. È possibile avere stored procedure che concatenano dinamicamente stringhe in una selezione SQL di grandi dimensioni e quindi eseguono i con sp_sqlexec. – TcKs

3

È possibile costruire l'unione in modo dinamico:

select name from sys.databases 

e quindi verificare se il database ha la tabella:

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

Che ti dà tutti i database per l'unione. È possibile creare il lato client di query o in SQL dinamico.

+0

Approccio interessante, ma ho ancora qualche dubbio sulla scalabilità. – Paddy

Problemi correlati