2016-07-14 27 views
1

Ich habe eine STG-Tabelle, in der wir Werte aus zwei SRC-Tabellen täglich in die STG-Tabelle abschneiden und laden. Ich habe ein Change-Flag (Ch_Flg) und in der STG-Tabelle so erstellt, dass wir, anstatt die Tabellen täglich zu kürzen, Werte in STG einfügen, nur wenn bestimmte Felder in SRC geändert wurden.Einfügen von Datensätzen in eine Tabelle, wenn sich die Werte von src geändert haben

Da jedoch SRC-Tabelle direkt in STG geladen wird, brauche ich eine temporäre Tabelle, in der ich alle SRC-Datensätze speichern und mit STG überprüfen kann, wenn die Datensätze geändert haben und in STG nur eingefügt, wenn diese Datensätze geändert haben.

Zum Beispiel der SRC1-Tabelle hat Spalten wie (ID, Name, Tag, Sector, Dept, Stadt, Telefon, HireDate etc.) und SRC2 haben Spalten wie (ID, Name, Competency, Stadt, Telefon usw.)

Sollte ich alle Werte aus SRC in eine temporäre Tabelle laden und dann mit der STG-Tabelle vergleichen? Oder gibt es einen effizienteren Weg, dies zu tun?

Antwort

0

Man könnte sie in die temporären Tabelle laden und dann so etwas wie diese

WITH SINGLES AS 
(
SELECT t1.ID 
FROM <sourcetablename> t1 
LEFT JOIN <desttablename> t2 
ON (t1.id = t2.id) 
WHERE t2.id IS NULL 
) 

INSERT <tabletherecordswillbeinserted>(ID, <otherfield>, <otherfield2>) 

SELECT S.id, S.<otherfield1>, s.<otherfield2> 
From singles S 
Left Join <sourcetablename> on S.id = <desttable>.id 
Where <desttable>.id Is Null 

Sie müssen möglicherweise in dem Änderungs-Flag, um den Code hinzuzufügen, aber das ist die allgemeine Idee, könnten Sie den Änderungs-Flag setzen in die CTE-Anweisung

+0

Danke für die Struktur. Was ist mit Singles? –

+0

Das wird als "Common Table Expression" oder CTE bezeichnet, es ist eine Möglichkeit, einen bestimmten Datensatz zu sammeln und etwas anderes damit zu tun. Wenn Sie in diesem Fall die select-Anweisung innerhalb von With verwenden und sie mit Ihren Tabellen ausführen, erhalten Sie alles aus einer Tabelle und nicht aus einer anderen zurück. Dann nehmen wir diese Datengruppe und fügen die Datensätze, die nicht existieren, in die Zieltabelle ein. In Ihrem Fall stelle ich mir vor, Sie interessieren sich nur für Datensätze mit einer bevölkerten Änderungsflagge. Sie können also Ihre Daten ändern, um sie zu ändern, und sie dann unten einfügen. – DrHouseofSQL

+0

edit: Alle 'anderen Felder', die ich am Ende des Skripts habe, müßten in Ihrer ursprünglichen Auswahl in der WITH-Anweisung sein. Sorry, dass – DrHouseofSQL