SQL Server 2008, Merge TSQL-Statement
Okt
28
Written by:
28.10.2007
Das neue MERGE Statement wird unter BI gelistet, hat aus meiner Sicht aber durchaus Vorteile bei "reinen" TSQL Anwendungen. Es läßt sich damit einfach in einem Statement eine Datensynchronisation zwischen einer Abfrage und einer Tabelle realisieren, wobei es definierbar ist, wann Daten geändert, eingefügt und gelöscht werden sollen. Im folgenden habe ich einmal ein kleines Beispiel dafür erstellt, in dem die einzelnen Teile per Kommentar erläutert sind:...
-- Ziel
MERGE dbo.ZielTab AS ziel
-- Quelle
USING (SELECT
cast(ID_string AS int) AS ID
,rtrim(Bez) AS Bez
,Name1
,Name2
FROM dbo.QuelleTab) AS quelle
-- Join Bedingung: Quelle mit Ziel
ON (quelle.ID = ziel.ID)
-- Datenzeile ist in Quelle und Zeile enthalten
-- Es wird ein Update ausgeführt
WHEN MATCHED
THEN UPDATE SET
ziel.Bez = quelle.Bez
,ziel.Name1 = quelle.Name1
,ziel.Name2 = quelle.Name2
-- Datenzeile ist in Quelle enthalten und im Ziel nicht
-- Es wird ein Insert in die Zieltabelle ausgeführt
WHEN TARGET NOT MATCHED
THEN INSERT (
ID
,Bez
,Name1
,Name2
)
VALUES (
quelle.ID
,quelle.Bez
,quelle.Name1
,quelle.Name2
)
-- Datenzeile ist in Quelle NICHT enthalten, jedoch im Ziel
-- Es wird ein Delete auf der Zieltabelle ausgeführt
WHEN SOURCE NOT MATCHED
THEN DELETE
;
-- es müssen nicht alle WHEN-Zweige angegeben sein,
-- z. B. wenn man nicht Löschen muss, dann kann der Zweig entfallen
-- Weiterhin können zusätzliche Bedigungen angegeben werden,
-- ein Update soll nur ausgeführt werden, wenn z. B. eine Spalte
-- größer als ein bestimmter Wert ist
weiter geht es in Teil 2: http://www.sqlpass.de/Default.aspx?tabid=178&EntryID=36