DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  Advanced Developers Track vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
Autor:Andreas Rauch

Selects auf verschiedene Datenbankserver

Oft genug stehen wir vor dem Problem, daß sich die gewünschten daten auf dem einen Server befinden und die anderen auf einen zweiten. Meist macht man sich dann Gedanken über die Importe der Daten; so daß man alle benötigten Daten nur noch auf einem Server hat. Außerdem ersinnt man schon Strategien über Replikatios- oder Synchronisationsmechanismen. An sich keine schlechte Idee... aber muss es denn gleich so ein Aufwand werden, wenn eine einzige Abfrage schon gereicht hätte?
 
Aber wie gehts? Nun, was wir brauchen ist ein unsere Abfrage und natürlich der Loginname und das Passwort fürden anderen Server. Nun hat man schon die halbe Miete. Die Verbindung auf den anderen Server funktioniert über eine Verbindunszeichenfolge
 
In diesem Beipiel Konnektiern wir uns mit einem zweiten SQL Server.
( 'SQLOLEDB', 'Data Source=dachstein;User ID=sa;Password=').
 
Sehen wir uns gleich mal das ganze SQL-Statement an:
 
use northwind
SELECT distinct northwind.dbo.customers.contactname,
             northwind.dbo.orders.orderid,  fs.customerid as fsid,
             northwind.dbo.customers.customerid
FROM
OpenDataSource( 'SQLOLEDB', 'Data Source=dachstein;User ID=sa;Password=').northwind.dbo.customers fs,
         orders, customers
where orders.customerid = fs.customerid

Über OpenDataSource können wir die Verbindungszeichenfolge für den zweiten Server angeben. Zur Vereinfachung des SQL Strings haber ich den Server Alias fs vergeben.

Achtung gilt es bei den Tabellen. Diese müssen natürlich eindeutig sein.. Ansonsten können  Sie wie gewohnt weiterarbeiten.

Nun wollen wir das ganze  mit Hilfe einer Stored Procedure dynamischer machen.

declare @sSQL varchar(8000)
declare @sServer varchar(50)
declare @sProvider varchar(50)
declare @sDatabase varchar(50)
declare @sTable varchar(50)

set @sServer = 'dachstein'
set @sProvider = 'SQLOLEDB'
set @sDatabase = 'northwind'
set @sTable = 'customers'

set @sSQL = 'select * from OpenDataSource( ''' + @sProvider +''', ''Data Source=' + @sServer + ';User ID=sa;Password='').' + @sDatabase + '.dbo.' + @sTable

exec(@sSQL)

So das wärs gewesen.

Viel Spaß!

Tipp:
Natürlich können Sie auch Verbindungen zu Access DB oder Excel Files herstellen.


Diskutieren Sie in den Foren

Fit for Admin – Ihr Windows Server 2008 R2 Intensiv-Training!