none
Daten vergleichen RRS feed

  • Frage

  • Hallo.

    Ich habe 2 Programme welche Synchronisiert werden sollen.

    Daher kommt es vor, dass in beiden programmen mehrere neue Kunden angelegt wurden (Nie die selben, dass soll ja die Synchro erledigen).

    Ich lese also aus beiden Programmen sämtliche Kundennummern aus und speicher diese in 2 versch. DataTable.

    DataTable1 hat z.B. 4000 Kundennummern und DataTable2 hat 4003 Kundennummern.

    Die Reinfolge ist durcheinander!

    Nun müssen beide Tabellen auf einen SQL Server geladen werden um dort vergleichen zu können welche Kundennummern vorhanden und welche noch nicht vorhanden sind um so neue Kunden eines Programmes in dem anderen anlegen zu können.

    Wie jedoch sieht die Gegenüberstellung aus?

    Brauche ich eine oder 2 Tabellen für den Vergleich?

    Angenommen ich nehme nur 1 Tabelle:

    ID | cl_kundennr | crm_kundennr

    0 | 1 | ?

    1 | 4 | ?

    2 | 22 | ?

    Ich weiß nun nicht wie ich die crm_kundennr`n zuordnen kann sodass falls es die crm_kundennr schon als cl_kundennr existiert, so wird die crm_kundennr neben der gleichen cl_kundennr gespeichert (Später folgen mehrere Daten als nur die Kundennr, aber die Kundennr soll die "Verknüpfung" sein) Existiert die crm_kundennr nicht, so wird ein neuer Datensatz angelegt indem die cl_kundennr nun fehlt.

    Die Datensätze wo eine der Kundennr fehlt, werde ich synchronisieren damit in beiden Programmen der Kunde angelegt ist.

    Wie kann man soetwas bewerkstelligen?

    Ein einfacher datatable WriteToServer Dump ist wohl nicht möglich.

    Hat jemand Rat?
    Vielen Dank

    Mittwoch, 7. April 2010 08:22

Antworten

  • IF OBJECT_ID('dbo.Table1','U') IS NULL
    BEGIN 
     -- Ertellt Tabelle 1
     CREATE TABLE Table1 (CustomerNumber char(3), Name varchar(56));
    
     --Speichert Kundendaten in die Tabelle 1 
     INSERT INTO dbo.Table1(CustomerNumber, Name)
     VALUES('100','ABC-AG'),
       ('200','CDE-AG')
    END
    
    IF OBJECT_ID('dbo.Table2','U') IS NULL
    BEGIN
     -- Ertellt Tabelle 2
     CREATE TABLE Table2 (CustomerNumber char(3), Name varchar(56));
    
     --Speichert Kundendaten in die Tabelle 2 
     INSERT INTO dbo.Table2(CustomerNumber, Name)
     VALUES('100','ABC-AG'),
       ('300','FGH-AG')
    END
    
    --Zeigt synchronisierte Datenmenge an
    SELECT CustomerNumber, Name FROM dbo.Table1
    EXCEPT
    SELECT CustomerNumber, Name FROM dbo.Table2
    UNION ALL
    SELECT CustomerNumber, Name FROM dbo.Table2
    
    --Vervollständigt die Tabelle 1
    INSERT INTO dbo.Table1
    SELECT CustomerNumber, Name FROM dbo.Table2
    EXCEPT
    SELECT CustomerNumber, Name FROM dbo.Table1
    
    --Vervollständigt die Tabelle 2
    INSERT INTO dbo.Table2
    SELECT CustomerNumber, Name FROM dbo.Table1
    EXCEPT
    SELECT CustomerNumber, Name FROM dbo.Table2
    
    --Zeigt synchronisierte Tabellen an
    SELECT * FROM dbo.Table1 ORDER by CustomerNumber
    SELECT * FROM dbo.Table2 ORDER by CustomerNumber
    
    --Lösch die beide Tabellen
    IF OBJECT_ID('dbo.Table1','U') IS NOT NULL
      DROP TABLE dbo.Table1;
    IF OBJECT_ID('dbo.Table2','U') IS NOT NULL
      DROP TABLE dbo.Table2;
    Donnerstag, 22. April 2010 20:42
  • Hallo. Ich kann das gewünschte Ziel über die Methode mit 2 Tabellen erreichen. Dennoch vielen Dank. PS: Weiß jemand wie ich den "nicht übereinstimmenden rest" einer Abfrage, abfragen kann? Danke
    Mittwoch, 7. April 2010 13:25

Alle Antworten

  • Hallo. Ich kann das gewünschte Ziel über die Methode mit 2 Tabellen erreichen. Dennoch vielen Dank. PS: Weiß jemand wie ich den "nicht übereinstimmenden rest" einer Abfrage, abfragen kann? Danke
    Mittwoch, 7. April 2010 13:25
  • IF OBJECT_ID('dbo.Table1','U') IS NULL
    BEGIN 
     -- Ertellt Tabelle 1
     CREATE TABLE Table1 (CustomerNumber char(3), Name varchar(56));
    
     --Speichert Kundendaten in die Tabelle 1 
     INSERT INTO dbo.Table1(CustomerNumber, Name)
     VALUES('100','ABC-AG'),
       ('200','CDE-AG')
    END
    
    IF OBJECT_ID('dbo.Table2','U') IS NULL
    BEGIN
     -- Ertellt Tabelle 2
     CREATE TABLE Table2 (CustomerNumber char(3), Name varchar(56));
    
     --Speichert Kundendaten in die Tabelle 2 
     INSERT INTO dbo.Table2(CustomerNumber, Name)
     VALUES('100','ABC-AG'),
       ('300','FGH-AG')
    END
    
    --Zeigt synchronisierte Datenmenge an
    SELECT CustomerNumber, Name FROM dbo.Table1
    EXCEPT
    SELECT CustomerNumber, Name FROM dbo.Table2
    UNION ALL
    SELECT CustomerNumber, Name FROM dbo.Table2
    
    --Vervollständigt die Tabelle 1
    INSERT INTO dbo.Table1
    SELECT CustomerNumber, Name FROM dbo.Table2
    EXCEPT
    SELECT CustomerNumber, Name FROM dbo.Table1
    
    --Vervollständigt die Tabelle 2
    INSERT INTO dbo.Table2
    SELECT CustomerNumber, Name FROM dbo.Table1
    EXCEPT
    SELECT CustomerNumber, Name FROM dbo.Table2
    
    --Zeigt synchronisierte Tabellen an
    SELECT * FROM dbo.Table1 ORDER by CustomerNumber
    SELECT * FROM dbo.Table2 ORDER by CustomerNumber
    
    --Lösch die beide Tabellen
    IF OBJECT_ID('dbo.Table1','U') IS NOT NULL
      DROP TABLE dbo.Table1;
    IF OBJECT_ID('dbo.Table2','U') IS NOT NULL
      DROP TABLE dbo.Table2;
    Donnerstag, 22. April 2010 20:42