Announcement

Collapse
No announcement yet.

Datenbanken abgleichen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbanken abgleichen

    Hi,

    Ich müsste in einer SQL-Server basierten Datenbank eine Tabelle mit einer Datenbank abgleichen, die als Access-Datei vorliegt, und dabei die Daten aus der Access-DB in die SQL-Server-DB übernehmen, für die in der SQL-Server-DB ein leerer Dummy-Datensatz existiert.

    Das Problem ist, dass in der Stoffenummmern-Tabelle auf dem SQL-Server etwa 1.000.000 Datensätze sind, und in der Stoffe-Tabelle aus der Access-Datenbank ca 600.000 Datensätze. Hinzu kommt, dass das Vergleichsmerkmal (die Stoffenummer) in der Access-Datenbank mit führenden Nullen auf 16 Stellen aufgepumpt geführt wird, in der SQL-Server Datenbank ohne Nullen.

    Ich habe also in Access ein mdb-File erstellt, das aus der Access-Datenbank und dem SQL-Server die beiden Tabellen verknüpft (um gelegentlich die Access-Datenbank auch austauschen zu können) und mal testweise eine SQL-Abfrage probiert nach der Art

    SELECT Stoffe.Nummer, Stoffe.Bezeichnung FROM Stoffe INNER JOIN Stoffnummern ON Stoffe.Nummer Like '%'+Stoffnummern.Stoffnummer WHERE Stoffnummern.DatumVerwendung IS NULL

    Diese Anfrage läuft nun schon seit heute morgen um halb 11, jetzt haben wir halb 2 und Access meldet sich auch beim System nicht mehr zurück, ich fürchte also das kann ich vergessen.

    Nun wollte ich mal die Experten fragen ob
    1. die lange Zeit wirklich nur mit der Datenmenge zusammenhängt, oder Access einfach nur abgeschmiert ist.
    2. die Verarbeitungszeit auf dem SQL-Server kürzer ist, wenn ich einen Weg finde, von dort auf die Access-DB zuzugreifen (irgendetwas in der Art ...FROM <Tabellenname> AT <Dateiname>...), und wie ich das angeben muss, wenn es geht.
    3. die Join-Bedingung irgendwie effektiver angegeben werden kann (ein Convert(Integer,Stoffe.Nummer) ist leider nicht möglich, weil diese Tabellen auch Nummern mit Buchstaben enthalten).
    4. es möglich ist, die SQL-Server Tabelle in dem Join zu ändern (in der Art "UPDATE Stoffenummern INNER JOIN Stoffe ON Stoffe.Nummer Like '%'+Stoffenummern.Stoffenummer SET Stoffenummern.Stofftext=Stoffe.Bezeichnung, Stoffenummern.TextVerwendung='verw. extern', Stoffenummern.DatumVerwendung=Heute WHERE Stoffenummern.DatumVerwendung IS NULL", SQL-Korrekturen gerne angenommen).
    5. es ungefährlich ist, dies auf dem SQL-Server zu tun, oder ich ihn damit lahmlege.


    Ich hoffe dass diese Fragen beantwortet werden können. Per Skript jeden Datensatz aus der Access-Tabelle einzeln auszulesen, und zu schauen, ob er einen passenden Eintrag in der SQL-Server Tabelle findet, würde vermutlich zu lange dauern.

    Mit freundlichen Grüßen
    Martin Dietz

  • #2
    Hallo,

    also für Probleme dieser Sorte kann DBMoto wohl einen Blick wert sein.
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Hallo Martin,

      ein kleiner Tipp schon mal
      .Nummer Like '%'+Stoffnummern.Stoffnummer
      Das LIKE '% sorgt schon mal dafür, das kein Index verwendet werden kann, was so oder so für schlechte Performance sorgt. Besser (MSSQL Syntax):

      Stoffe.Nummer = RIGHT(REPLICATE('0', 16) + CONVERT(varchar, Stoffnummern.Stoffnummer), 16)
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment

      Working...
      X