Announcement

Collapse
No announcement yet.

Daten aus Textdatei in SQL DB importieren

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

  • Daten aus Textdatei in SQL DB importieren

    Hallo zusammen,

    ich habe ein kleines Problem. Ich muss Daten aus einer Textdatei in eine MS SQL 2000 DB einlesen und weiß momentan nicht genau wie ich das machen soll.
    Ich bekomme in der Textdatei folgenden Aufbau :

    GUID | Feld2 | Feld 3 | Feld 4
    {E382D4CB-6A0B-4DB4-81A3-F3B1F248}|Belastung|1|ff|

    Diese lese ich per DTS Paket in eine neue Tabelle ein. ( Tabelle 1 )
    Jetzt möchte ich schauen ob in Tabelle 2 die GUID existiert, dann möchte ich
    ein Update der jeweiligen Datensätze machen. Jeweils bis alles abgearbeitet ist. ( Es kann eine Zeile in der Textdatei stehen oder auch 100 Zeilen. )
    Wenn die GUID nicht vorhanden ist, soll nichts passieren.

    Es wäre sehr schön wenn ihr mir hier helfen könntet.
    Vielen Dank im voraus.

    mfg

    Peter

  • #2
    Hallo,

    wenn das DTS-Paket die Daten bereits in der Tabelle 1 abgelegt hat, besteht die Aufgabe "nur" darin, den neu importierten Datenbestand mit der Tabelle 2 zu vergleichen. Dazu wären die folgenden Zutaten notwendig, wenn komplexere Prüfungsschritte vor dem UPDATE-Aufruf notwendig sind:
    1. Über die DECLARE…CURSOR LOCAL FAST_FORWARD-Anweisung wird ein dynamischer, nur vorwärts positionierbarer Cursor für die Tabelle 1 deklariert, wobei die nach FOR angefügte SELECT-Abfrage die Ergebnismenge definiert, die über den Cursor erreichbar sein soll.
    2. Nachdem der deklarierte Cursor über OPEN geöffnet wird, legen FETCH NEXT-Aufrufe innerhalb einer WHILE-Schleife die benötigten Daten des aktuellen Datensatzes in lokalen Variablen ab.
    3. Über eine IF EXISTS-Abfrage wird innerhalb der WHILE-Schleife geprüft, ob der GUID-Wert aus Tabellw 1 in Tabelle 2 vorhanden ist. Wenn die GUID gefunden wird, das Update für die Tabelle 2 auslösen.
    4. Am Ende wird aufgeräumt (Cursor über CLOSE schließen und über DEALLOCATE freigeben).


    Wenn es jedoch nur darum geht, die Spalten aus Tabelle 2 mit den Werten aus Tabelle 1 zu überschreiben, reicht eine UPDATE-Anweisung aus, die beide Tabellen über einen JOIN über die GUID-Spalte miteinander verbindet:

    [highlight=SQL]
    USE tempdb
    GO

    CREATE TABLE dbo.Tabelle1
    (
    id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
    wert VARCHAR(9) NOT NULL
    )
    GO
    CREATE TABLE dbo.Tabelle2
    (
    id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
    wert VARCHAR(9) NOT NULL
    )
    GO
    -- Testdaten Tabelle 2
    INSERT INTO dbo.Tabelle2 VALUES (NEWID(), 'Test 1');
    INSERT INTO dbo.Tabelle2 VALUES (NEWID(), 'Test 1');
    INSERT INTO dbo.Tabelle2 VALUES (NEWID(), 'Test 1');
    GO
    -- Testdaten Tabelle 1
    INSERT INTO dbo.Tabelle1 SELECT TOP 2 id,wert FROM dbo.Tabelle2;
    INSERT INTO dbo.Tabelle1 VALUES (NEWID(), 'Test 2');
    GO

    -- Nur die Datensätze von Tabelle 2 aktualisieren,
    -- deren GUID-Wert auch in Tabelle 1 vorkomme
    UPDATE
    dbo.Tabelle2
    SET
    wert = q.wert + 'X'
    FROM
    dbo.Tabelle1 AS q
    WHERE
    dbo.Tabelle2.id = q.id;
    GO

    -- Ergebnis prüfen
    SELECT * FROM dbo.Tabelle1
    SELECT * FROM dbo.Tabelle2
    GO
    [/highlight]
    Zuletzt editiert von Andreas Kosch; 15.01.2008, 07:57.

    Comment


    • #3
      Hallo & Vielen Dank erstmal,

      das sieht schonmal sehr gut aus. Ich werde das mal so ausprobieren.

      mfg


      Peter

      Comment

      Working...
      X