Merge probleme aufgrund Mehrteiligen Bezeichner

kpt.Unbrauchbar

Neuer Benutzer
Beiträge
1
Hallo ich bin neu hier in Forum und suche bisschen Weisheit.

Ich habe einen trivialen Merge:


MERGE INTO dbo.sperradressen WITH (HOLDLOCK) AS target
USING (SELECT dbo.f012.*, ISNULL(land.iso2,0) iso2land FROM dbo.f012
INNER JOIN f010 ON f010.firma = f012.firma AND f010.sa = f012.sa AND f010.konto = f012.konto
LEFT JOIN dbo.land on dbo.f012.firma = land.firma AND dbo.land.unr = 0 )
AS source
ON target.ref_table ='f012' AND target.ref_key = source.key_1

WHEN MATCHED AND (target.name1 != source.nachname OR
target.name2 != source.vorname OR
target.name3 != source.adr_zusatz OR
target.strasse != source.str OR
target.plz != f010.plz OR
target.stadt != f010.ort OR
target.land != source.iso2land)
THEN

UPDATE SET
target.name1 = source.nachname,
target.name2 = source.vorname,
target.name3 = source.adr_zusatz,
target.strasse = f010.str,
target.plz = f010.plz,
target.stadt = f010.ort,

target.land = source.iso2land,

target.eusanktstatus = 0,
target.hhupd = '${hhupd}',
target.eusanktinfo = '',
target.info = '',
target.firstname = '',
target.middlename = '',
target.lastname = '',
target.wholename = '',
target.street = '',
target.zipcode = '',
target.city = '',
target.country = ''

WHEN NOT MATCHED BY TARGET THEN
INSERT (target.name1, target.name2, target.name3,target.strasse,target.plz,target.stadt, target.land, target.hhupd)
VALUES (source.nachname, source.vorname, source.adr_zusatz,f010.str,f010.plz,f010.ort,source.iso2land, '${hhupd}')
WHEN NOT MATCHED BY SOURCE THEN
DELETE;




dieser führt an den stellen wo ich f010 eingetragen habe zu der Fehlermeldung :
Die in der MERGE-Anweisung verwendete Einfügespaltenliste darf keine mehrteiligen Bezeichner enthalten. Verwenden Sie stattdessen einteilige Bezeichner.



Im Grunde wollte ich mit dem Updatepart folgendem alten Updatebefehl ersetzen:

UPDATE sperradressen
SET sperradressen.name1 = f012.nachname,
sperradressen.name2 = f012.vorname,
sperradressen.name3 = f012.adr_zusatz,
sperradressen.strasse = f010.str,
sperradressen.plz = f010.plz,
sperradressen.stadt = f010.ort,
sperradressen.land = land.iso2,
sperradressen.eusanktstatus = 0,
sperradressen.hhupd = '${hhupd}',
sperradressen.eusanktinfo = '',
sperradressen.info = '',
sperradressen.firstname = '',
sperradressen.middlename = '',
sperradressen.lastname = '',
sperradressen.wholename = '',
sperradressen.street = '',
sperradressen.zipcode = '',
sperradressen.city = '',
sperradressen.country = ''
FROM f012
INNER JOIN f010 ON ( f010.firma = f012.firma AND f010.sa = f012.sa AND f010.konto = f012.konto )
INNER JOIN land ON ( f010.firma = land.firma AND f010.land = land.nr AND land.unr = 0 )
WHERE f012.firma = ${TBR}
AND f012.anr = 00000000
AND f012.key_1 = sperradressen.key_1
AND (sperradressen.name1 != f012.nachname
OR sperradressen.name2 != f012.vorname
OR sperradressen.name3 != f012.adr_zusatz
OR sperradressen.strasse != f010.str
OR sperradressen.plz != f010.plz
OR sperradressen.stadt != f010.ort
OR sperradressen.land != land.iso2);

Ich finde allerdings den Fehler nicht. Egal ob ich den left Join auf Inner Join drehe, oder nicht.
Ich hoffe ihr könnt ihr mir weiterhelfen.

Vielen dank im voraus
 
Werbung:
Es muss lauten "ich suche ein bisschen Weisheit", das wäre ein Anfang.

Dein neues Statement verschluckt die original Quelltabellen und fasst sie unter "source" zusammen. Das muss berücksichtigt werden, wenn auf die Werte zugegriffen wird.
 
Werbung:
Oder anders gesagt dein Select in Klammern hinter USING liefert zwar die Daten der Tabelle f010 mit aber unter dem neuen Alias source.

PS: Bin mir grad nicht ganz sicher aber bei den MERGE-Bedingungen könnten NULL-Werte Probleme machen.
 
Zurück
Oben