Abfrage ueber mehrere DATENBANKEN
dr.Colossos
- datenbank
0 Ilja0 Tom0 Vinzenz Mai0 Frank (no reg)2 Christian Seiler0 Ilja
Hi,
ist es mit MSSQL (2005) moeglich, mehrere Datenbanken (ja, Datenbanken, nicht Tabellen) in einer Query abzufragen, also sowas in der Art:
SELECT db1.fieldA AS db1_feld_A, db2.fieldA AS db2_feld_A WHERE db1.fieldA = db2.fieldA;
Geht das?
Btw, wie oben geht's nicht, aber geht's irgendwie anders?
Wie siehts mit PGSQL order Oracle aus, weiss das wer?
Danke sehr!
yo,
ist es mit MSSQL (2005) moeglich, mehrere Datenbanken (ja, Datenbanken, nicht Tabellen) in einer Query abzufragen, also sowas in der Art:
grundsätzlich ist das möglich, aber dafür ist erst mal der begriff "mehrere datenbanken" zu klären. bei msssql können nämlich verschiedene datenbanken auf einem server liegen. dafür bräuchtest du dann einfach nur die berechtigungen für die jeweilige datenbank und kannst sie entsprechend der namen der datenbanken ansprechen. streng genommen handelt es sich aber nicht wirklich um verschiesene datenbanken auf einem server.
bei oracle zum beispiel wären das mehrere schemata auf einem server(instanz) und nicht mehrerer datenbanken. der begriff datenbank unter mssql ist also zweideutig. bei oracle kannst du mehrer datenbank (also verschiedene instanzen) mit einem sogenannten "database link" ansprechen, google spuckt dazu eine menge links aus.
Ilja
Hi,
danke an alle.
@Tom: Sorry, habe das "FROM" im obigen Beispiel vergessen, bei meinen Tests natuerlich nicht ...
@Vinzenz: ... d'oh, ja, so hatte ich es, hab nur das "dbo" vergessen.
Funktioniert, danke!
Hello,
ist es mit MSSQL (2005) moeglich, mehrere Datenbanken (ja, Datenbanken, nicht Tabellen) in einer Query abzufragen, also sowas in der Art:
SELECT db1.fieldA AS db1_feld_A, db2.fieldA AS db2_feld_A WHERE db1.fieldA = db2.fieldA;
Geht das?
Btw, wie oben geht's nicht, aber geht's irgendwie anders?
Was geht nicht?
Benötigt MSSQL kein from?
So würde es z.B. bei MySQL aussehen und auch funktionieren, Zugriffsrechte vorausgesetzt
select testdb.adresse.* from testdb.adresse, testserver.adresse where testdb.adresse.id_adresse = testserver.adresse.id_adresse;
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo
ist es mit MSSQL (2005) moeglich, mehrere Datenbanken (ja, Datenbanken, nicht Tabellen) in einer Query abzufragen, also sowas in der Art:
Geht das?
ja, selbstverständlich, z.B. mit vollständigen Bezeichnern, z.B.
SELECT
t1.feld1,
t2.feld2
FROM
db1.dbo.tabelle1 t1 -- die genauen Bezeichnungen entnehme dem SQL-Manager
INNER JOIN
db2.dbo.tabelle2 t2
ON t1.feld3 = t2.feld4
Kein Problem und im Handbuch genauso beschrieben.
Freundliche Grüße
Vinzenz
Hallo,
MS SQL ...
1 physikalischer Server (Hardware) mit einem Windows Betriebssystem
-> n MS SQL Server Instanzen (Server-Installationen), wie z.b. SERVER\Instanz1, SERVER\Instanz2 usw.
-> 1 Master Datenbank, 1 Model Datenbank, 1 Temp Datenbank, 1 MSDB Datenbank
-> n Benutzerdatenbanken (imho ist da bei 1024 noch nicht Schluss)
Eine "Datenbank" ist in diesem Sinne eine "logische Einheit", u.a. gekennzeichnet durch eigene Dateien.
Objekte unter MS SQL werden mit Teilen des oder mit dem vollen qualifizierten Namen innerhalb einer Instanz angesprochen:
[Server].[Datenbank].[Owner/Schema].[Objekt]
Also z.b.
Aus Gründen der Übersicht, sollte aber mindestens immer [Owner/Schema].[Objekt] zur Identifikation benutzt werden.
Auf Aliase geh ich jetzt nicht ein.
Für den Zugriff quer über mehrere Server gibt es das Feature "Linked Server", wo man eine andere (entfernte) Instanz von MS SQL oder auch Oracle und diverses andere registrieren kann. Ohne diese Registrierung sind Abfragen über mehrere Server/Instanzen _nicht_ möglich, weil die eigene MS SQL Instanz den ersten Teil [Server] vom voll-qualifizierenden Namen nicht kennt.
Da von "Zweideutigkeiten" zu sprechen, ist einfach schwachsinnig. Genauso schwachsinnig, als wenn ich mich halbwissend über Oracle auslassen würde. Es ist einfach ein anderes Konzept.(Punkt)
Ciao, Frank
Hallo,
Da von "Zweideutigkeiten" zu sprechen, ist einfach schwachsinnig. Genauso schwachsinnig, als wenn ich mich halbwissend über Oracle auslassen würde. Es ist einfach ein anderes Konzept.(Punkt)
Öh... was hat Dich denn hier geritten? "Zweideutigkeiten"? Ich lese das Wort hier im Thread in Deinem Posting zum ersten Mal. Worauf beziehst Du Dich denn bitte? Und warum hier am Ende so garstig?
Viele Grüße,
Christian
Moin,
der begriff datenbank unter mssql ist also zweideutig.
siehe https://forum.selfhtml.org/?t=162710&m=1059082 ;)
Ich nehme speziell Anstoss an der bekräftigenden Verwendung von "also".
Ciao, Frank
Hello Frank,
der begriff datenbank unter mssql ist also zweideutig.
siehe https://forum.selfhtml.org/?t=162710&m=1059082 ;)Ich nehme speziell Anstoss an der bekräftigenden Verwendung von "also".
Und warum? Der Begriff ist im Allgemeinen schon mehrdeutig. Wenn er dann in Bezug auf mssql nur noch zweideutig ist, ist das doch schon ein Fortschritt, wobei ich natürlich einräumen muss, dass das Wort "zweideutig" zumindest im Deutschen schon zweideutig ist. DIE nehmen aber mWn hauptsächlich MySQL und nicht mssql, weil dort nämlich an allem gesprat wird, nur nicht an der Vaseline...
*grins*
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo Frank,
der begriff datenbank unter mssql ist also zweideutig.
siehe https://forum.selfhtml.org/?t=162710&m=1059082 ;)Ich nehme speziell Anstoss an der bekräftigenden Verwendung von "also".
Oh, achso, hmm, kein Wunder dass ich nicht verstanden habe, worauf Du Dich beziehst. Ok, ich ziehe meinen Einwand zurück.
Viele Grüße,
Christian
Hallo,
MSSQL
Da kenne ich mich nicht mit aus.
Wie siehts mit PGSQL order Oracle aus, weiss das wer?
Postgresql: Postgresql kennt Datenbanken und Schemata. Datenbank ist das, was man beim Verbinden angibt. Jede Datenbank ist nochmal in Schemata unterteilt, das Default-Schema ist 'public'. Jedes Schema enthält dann die Tabellen. Zugegriffen auf verschiedene Tabellen wird per datebankname.schemaname.tabellenname. Allerdings: Postgres kann KEINE Datenbankübergreifenden Abfragen DIREKT durchführen, d.h. ein SELECT * FROM db1.public.tabelle1, db2.public.tabelle2 wird in PostgreSQL fehlschlagen. Es gibt in PostgreSQL allerdings eine Alternative: Die dblink-Erweiterung. Zuerst einmal: Du musst auf der Datenbank, auf der Du die Abfragen laufen lassen willst, erst einmal ein SQL laufen lassen, das die nötigen Funktionen erstellt. Das heißt 'dblink.sql' und findet sich irgendwo in der Postgres-Installation. Wenn das gelaufen ist, kannst Du Abfragen der Art SELECT * FROM dblink ('dbname=anderedb', 'SELECT spalte1, spalte2 FROM tabelle') AS t1(spalte1 typ1, spalte2 type2)
absetzen - und dann natürlich auch mit JOINs arbeiten. Allerdings musst Du hier explizit die Typen der zurückgegebenen Abfrage definieren. Außerdem ist's möglich, sich das als VIEW zu definieren, damit man sich beim Abfragen Aufwand spart.
Oracle: Oracle unterteilt Datenbanken in Instanzen und Schemata. Eine Instanz ist im Prinzip das, was man unter anderen DBMS als 'Datenbank' besteht, wenn auch Oracle da ein paar Eigenheiten hat. Jede Datenbank ist in Schemata unterteilt - und die ergeben sich aus den Nutzern, die auf die Datenbank Zugriff haben. Das heißt: Wenn ich einen user USER01 anlege in Oracle in einer Instanz, dann wird für den automatisch auch ein Schema USER01 angelegt. Ich kann innerhalb einer Instanz problemlos per 'schemaname.tabellenname' auf andere Tabellen innerhalb andere Schemata (d.h. von anderen User angelegte) zugreifen - WENN die entsprechenden Zugriffsrechte (GRANT) gesetzt sind. Wenn ich von Oracle aus auf eine andere Instanz (!) zugreifen will, dann gibt es sogenannte Database Links - auf der Seite wird auch erklärt, wie man dann per SELECT auf die Tabellen zugreift. Zudem ist es bei Oracle eine Überlegung wert, ob man nicht aus Performancegründen (sofern man nicht immer 100%ig aktuelle Daten benötigt) noch zusätzlich mit sogenannten "Materialized Views" arbeitet, d.h. sich die Daten in regelmäßigen Abständen von der anderen Datenbank synchronisieren lässt.
Viele Grüße,
Christian
yo,
Oracle: Oracle unterteilt Datenbanken in Instanzen und Schemata. Eine Instanz ist im Prinzip das, was man unter anderen DBMS als 'Datenbank' besteht.
bei Oracle sind instanzen und datenbanken zwei verschiedene dinge, so handelt es sich bei einer instanz "nur" um die prozesse und der sga, aber nicht um die datendateien oder schemta, welche wiederum zu der datenbank gehören.
Ilja