Hallo,
ich suche nach einer geschickten Möglichkeit, SQL Abfragen über mehrere DBs (nicht Tabellen) zu erstellen. Dabei müssen das nicht unbedingt gleiche Datenbanksysteme sein.
Ich habe mir dazu folgendes gedacht:
Am einfachsten wäre es, wenn man für jede Datenbank, die in die Abfrage eingehen soll, eine einzelne Abfrage erstellt und das Ergebnis dann als Tabelle in eine extra Datenbank speichert. Mit dieser extra Datenbank kann dann letztlich die Abfrage ausgeführt werden.
Sicherlich würde das ein extrem großen Aufwand sein, jedes Mal diese "extra Datenbank" zu aktualisieren. Aber das könnte Nachts ohne Probleme geschehen.
Die Frage, die ich mir dabei stelle, ist, wie kann ich am besten aus den Daten der einzelnen Tabellen eine neue Tabelle in einer neuen DB (und Datenbanksystem) erstellen?
Theoretisch könnte ich ja mittels DataReader die einzelnen Daten aus den jeweiligen Tabellen holen und dann mit ein Insert SQL-Statement aufbauen und wieder in die neue DB einfügen.
Ich sehe dabei erstmal ein dickes Performance-Probleme.
Wie füge ich die Daten am besten ein? Wenn ich jedes Mal ein "INSERT INTO Tabelle etc." abschicke, ist das wahrscheinlich tierisch lahm. Da gibt es wahrscheinlich einen bessere Weg, oder?
Das nächste Problem ist, die benötigten Columns in der Tabelle zu erstellen. Die Frage ist ja hierbei, wie frage ich am besten ab, um was für ein Datenfeld (also VarChar, Int etc.) und dessen Länge es sich dabei handelt.
Das wäre meine Idee, wie man so etwas umsetzen kann.
Fallen euch andere elegantere Wege ein?
:Wissen ist Macht, nichts wissen macht nichts:
Hi!
Schau Dir mal LINQ an.
Damit sollte eigentlich ein Abfrage über mehrere DB's möglich sein...?
Zumindest hab ich es in den Tuts und Videos so verstanden.
lg
M@TUK
Hast du einen passenden Link dazu?
So wie ich das gerade verstanden habe, hat das mehrere Nachteile.
Es gibt es noch nicht als Final. Für ein Produktivsystem ist mir das waage (was passiert, wenn die es wieder komplett über den Haufen schmeißen oder beschneiden?).
Dann sieht es mir so aus, also ob das kein normales AnsiSql ist.
Außerdem ist wohl eine Integration in eine C# 2.0 Umgebung nicht möglich (oder nur mit vielen Workarounds?).
Vielleicht sind das jetzt ja auch nur Vorurteile, die ich gerade so hier aufgeschnappt habe, aber sollte es wirklich so sein, so wäre das Abschreckung genug 😉.
Aber vielen Dank auf jeden Fall.
:Wissen ist Macht, nichts wissen macht nichts:
hatte auch schon öfter das problem das ich ergebnisse brauchte wo die tabellen teilweise in einer DB2 und teilweise in Mysql waren ich habe das immer so gemacht dass ich die daten zuerst auf eine db gebracht habe und dann dort über joins zum entsprechenden ergebnis gekommen bin, hoffe das hilft dir weiter
"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."
So war es ja eigentlich gedacht. Nur möchte ich das mit (m)einem Programm machen.
Das Problem, das ich momentan sehe, ist die entsprechenden Datentypen der Spalten der Quelltabelle zu bestimmen und anschließend diese dann in die Zieltabelle zu schreiben. Da habe ich bisher keine Möglichkeit gefunden.
:Wissen ist Macht, nichts wissen macht nichts:
ist die entsprechenden Datentypen der Spalten der Quelltabelle zu bestimmen und anschließend diese dann in die Zieltabelle zu schreiben. Da habe ich bisher keine Möglichkeit gefunden.
So geht das :
DbDataReader dr = null;
...
DataTable dt = dr.GetSchemaTable();
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Ähm ja, aber damit konnte ich bisher nicht die Typen der Tabelle auslesen. Verwendet habe ich das schon häufiger, um z.B. die Tabellen etc. aufzulisten. Auch die Columns einer Tabelle habe ich damit schon aufgelistet, nur konnte ich nicht herausfinden, wie ich damit dann auch die Column-Typen raus bekomme.
Kannst du mir da vielleicht ein Beispiel geben?
:Wissen ist Macht, nichts wissen macht nichts: