Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Merge probleme aufgrund Mehrteiligen Bezeichner

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von kpt.Unbrauchbar, 23 Juli 2020.

  1. kpt.Unbrauchbar

    kpt.Unbrauchbar Neuer Benutzer

    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
     
  2. dabadepdu

    dabadepdu Fleissiger Benutzer

    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.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden