Frage

Ich versuche, Daten aus zwei Systemen zu vergleichen. Die Grundidee ist:

  • TEMP -Tabelle erstellen.
  • Fügen Sie Tabelle1 Daten ein.
  • Fügen Sie Tabelle2 -Daten (Tabelle A verknüpfter Remote -Server) mit eindeutigen IDs ein.
  • Filter, wo die erste oder zweite Tabelle unterschiedliche Informationen enthält.

Ich versuche, den zweiten Satz von Einsätzen aus dem zweiten System zum Einfügen und falls duplizieren, stattdessen zu aktualisieren. Ich kann es nicht richtig machen. Was soll ich für den letzten Einsatz haben?

Ich habe nicht den "Filterteil", weil ich nicht die Tabelle2 -Daten eingefügt habe. Der Filterteil würde Zeilen zeigen, bei denen zwischen den beiden Systemen aktiv, der letzte oder der Vorname unterschiedlich ist. Einfach where Table1LastName <> Table2LastName Tippen Sie an.

HINWEIS: Ich habe das mit 2 Temperaturtabellen und einem vollem äußeren Join und einer "Where ID ist null" zusammen. Ich versuche nur, dies auf eine Art und Weise zu funktionieren, die ich vorher noch nicht benutzt habe.

if object_id('tempdb..#CompareDrs') is not null
    drop table #CompareDrs;
GO

create table #CompareDrs
(
     ID varchar(20) unique
    ,TABLE1Active varchar(1)
    ,TABLE1LastName varchar(50)
    ,TABLE1FirstName varchar(50)
    ,TABLE2Active varchar(1)
    ,TABLE2LastName varchar(50)
    ,TABLE2FirstName varchar(50)
);
GO

INSERT INTO #CompareDrs (ID, TABLE1Active, TABLE1LastName, TABLE1FirstName)
    SELECT
         right('00000000000000000000' + ForeignID, 20) ID
        ,case when Active = 0 then 'I'
              when Active = 1 then 'A'
              else ' '
         end       TABLE1Active
        ,LastName  TABLE1LastName
        ,FirstName TABLE1FirstName
    FROM
                  [DATABASE1].dbo.DRs
    Order By
        ID;
GO

INSERT Into #CompareDrs (ID, TABLE2Active, TABLE2LastName, TABLE2FirstName)
    SELECT 
         right('00000000000000000000' + Cast(DRDR# as Varchar(50)), 20) ID
        ,DRAFLG TABLE2Active
        ,DRLNAM TABLE2LastName
        ,DR1NAM TABLE2FirstName
    FROM
        [LINKEDERVER].[DATABASE].[CATALOG].[TABLE] DR
ON DUPLICATE KEY UPDATE TABLE2Active = VALUES(TABLE2Active), 
                        TABLE2LastName = VALUES(TABLE2LastName), 
                        TABLE2FirstName = VALUES(TABLE2FirstName),
GO

SELECT * FROM #CompareDrs;
War es hilfreich?

Lösung

Wenn Sie SQL 2008 verwenden, sehen Sie sich das an die VERSCHMELZEN Anweisung kann das tun, was andere Plattformen upsert, aktualisieren, wenn es vorhanden ist, andernfalls einfügen.

Andere Tipps

Sie können eine ausgewählte Anweisung schreiben, die die IDs erfasst, die aus dem ersten Einfügen in die TEMP -Tabelle eingefügt wurden.

Fügen Sie dann einfach aus der 2. Tabelle ein, es sei denn, IDs enthalten in Ihrer vorherigen SELET -Anweisung. Verwenden Sie eine weitere Anweisung, um die anderen Zeilen als Update zu implementieren

Es sieht so aus, als würden Sie passende Zeilen aus zwei Tischen in eine einzelne Zeile in einer anderen Tabelle bringen.

Wenn dies der Fall ist, müssen Sie

  • Spalten aus der ersten Tabelle einfügen und
  • Aktualisieren Sie andere Spalten aus der zweiten Tabelle, in der die ID -Nummern übereinstimmen und die anderen Spalten null sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top