Announcement

Collapse
No announcement yet.

datensätze einfügen, ohne redundanz

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

  • datensätze einfügen, ohne redundanz

    Hossa!
    Ich bin noch eine kleine Anfängerniete und hab hier ein kleines Problem.
    ich habe 2 Datenbanken. Aus DB1 sollen aus einer Tabelle Daten in die entsprechenden Felder in einer Tabelle in DB2 gepackt werden. Das ist ja nicht so das Problem.
    Aber: in der Tabelle in DB2 sind schon einige Datensätze vorhanden, die ebenfalls in der Tabelle aus DB1 sind. Jetzt soll ich die Daten einfügen, ohne dass dopplte Datensätze eingefügt werden. Ich hab schon 1000 Wege, wie es nicht geht und such jetzt den einzig wahren Weg zum Ziel.
    Ach ja! ich arbeite unter MSSQL 2000.

    Vielen Dank schon mal im Voraus

    Jenni

  • #2
    Weiß nicht genau was MSSQl für ein SQL spricht aber nested SQL sollte es doch lösen, also mal aus dem hohlen Bauch:

    <pre>insert into tab2 (feld1,..,feldn)
    select feld1,...,feldn from tab1
    where feld1 || feld2 not in (select feld1 || feld2 from tab2)</pre>

    Oder hast Du das schon probiert

    Comment


    • #3
      Hallo,

      das folgende Beispiel (stammt aus meinem neuen ADO-Buch) für einen regelmässigen Datenabgleich von einer Paradox-Datenbank in eine MS SQL Server 2000-Datenbank demonstriert eine der möglichen Techniken: <br>
      1. Neue Daten in eine Hilfstabelle der MSSQL-Datenbank einfügen <br>
      2. Stored Procedure aufrufen, die folgende Schritte macht:<br>
      a) vorhandene Datensätze aktualisieren<br>
      b) neu hinzugekommene Datensätze einfügen<br>
      3. Wenn alles erfolgreich war, Datensätze aus der Hilfstabelle löschen
      <pre>
      CREATE PROCEDURE prDoImport
      @iINSERT INTEGER OUTPUT,
      @iUPDATE INTEGER OUTPUT,
      @iDELETE INTEGER OUTPUT
      AS
      DECLARE @iError INTEGER
      BEGIN TRANSACTION
      -- Schritt 1: UPDATE der vorhandenen Datensätze
      UPDATE BorlandNews
      SET NewsText = IMPORTTBL.Bemerkungen
      FROM BorlandNews INNER JOIN IMPORTTBL ON BorlandNews.Thema = IMPORTTBL.Thema
      SELECT @iUPDATE = @@ROWCOUNT, @iError = @@ERROR
      IF (@iERROR = 0)
      BEGIN
      -- Schritt 2: INSERT der neuen Datensätze
      INSERT INTO BorlandNews (CatID,Thema,NewsText,NewsDate)
      SELECT CASE Compiler
      WHEN 'ADO' THEN 1
      WHEN 'Andere' THEN 2
      WHEN 'BDE 3.x' THEN 3
      WHEN 'BDE 4.x' THEN 4
      WHEN 'BDE 5.x' THEN 5
      WHEN 'C/C++' THEN 6
      WHEN 'COM' THEN 7
      WHEN 'dbExpress' THEN 8
      WHEN 'Delphi 1.0' THEN 9
      WHEN 'Delphi 2.0' THEN 10
      WHEN 'Delphi 3.0' THEN 11
      WHEN 'Delphi 4.0' THEN 12
      WHEN 'Delphi 5.0' THEN 13
      WHEN 'Delphi 6.0' THEN 14
      WHEN 'IBX' THEN 15
      WHEN 'InterBase' THEN 16
      WHEN 'Internet' THEN 17
      WHEN 'MIDAS' THEN 18
      WHEN 'SQL' THEN 19
      WHEN 'WebService' THEN 20
      WHEN 'WebServices' THEN 20
      WHEN 'WebSnap' THEN 21
      WHEN 'Win32' THEN 22
      ELSE 23
      END,Thema,Bemerkungen,UpdateDatum
      FROM IMPORTTBL
      WHERE Thema NOT IN (SELECT Thema FROM BorlandNews)
      SELECT @iINSERT = @@ROWCOUNT, @iError = @@ERROR
      IF (@iERROR = 0)
      BEGIN
      -- Schritt 3: Import-Tabelle leeren
      DELETE FROM IMPORTTBL
      SELECT @iDELETE = @@ROWCOUNT, @iError = @@ERROR
      END
      END
      --- COMMIT oder ROLLBACK?
      IF (@iError = 0)
      COMMIT TRANSACTION
      ELSE
      ROLLBACK TRANSACTION
      -- Fehlernummer zurückliefern
      RETURN @iError
      GO
      </pre&gt

      Comment

      Working...
      X