DevTrain

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.


Erfasst am: 28.01.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=692
© Copyright 2003 ppedv AG - http://www.ppedv.de