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

Stored Procedure Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von andi060283, 10 Oktober 2018.

  1. andi060283

    andi060283 Benutzer

    Hallo,

    ich möchte folgende Stored Procedure erfolgreich ausführen:

    Code:
    insert into tbl_tmp_rpt_Flugteilnehmer
    
    SELECT
    tblFlugAirline.sAirline,
    tblFlugAirline.sAirEmpfänger,
    tblFlugAirline.sAirStrasse,
    tblFlugAirline._sLandStammID,
    tblFlugAirline._sPLZStammID,
    tblFlugAirline.sAirOrt,
    @sFlugstrecken as sFlugstrecken,
    @sFlugdaten as sFlugdaten,
    @sCode as sCode,
    @sTextauswahl as sText,
    'sReiseNr'=
    cast(tblReiseStamm.nReNr as varchar(10)),
    
    tblReiseStamm.datTerminVon,
    tblReiseStamm.datTerminBis,
     + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
      'sKunde' = case when [tblKundeStamm].[nAnredeKz]=1 then 'Mr.  '
            else case when [tblKundeStamm].[nAnredeKz]=6 then 'Mrs. '
            else case when [tblKundeStamm].[nTitel2Kz]=4 then 'van der '
            else case when [tblKundeStamm].[nTitel2Kz]= 22 then 'Ffr von'
            else case when [tblKundeStamm].[nTitel2Kz]= 25 then 'Baron von'
            else case when [tblKundeStamm].[nTitel2Kz]= 19 then 'Consul'
            else '' end end end end end end   + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
    'sUser' = system_user
    --
    
    FROM tblFlugAirline,
    Die Abfragen kommen von einer Tabelle "tblKundeStamm" mit den Spalten "nAnredeKz" und "nTitel2Kz".
    Die Anrede soll aus nAnredeKz und nTitel2Kz zusammengesetzt werden mit den Feldern sName, sVName und sWeitereVornamen. Es funktioniert auch bis auf das einfügen der Sonderanreden aus nTitel2Kz wie z.B. "Baron von". Anscheinend kann ich in der Case-Abfrage nur Werte einer Spalte nehmen. Wie kann ich ich aber die Werte aus z.B. else case when [tblKundeStamm].[nTitel2Kz]= 25 then 'Baron von' auslesen damit die Werte erfolgreich zurückgeliefert werden? Innerhalb des Cases funktioniert es leider nicht. Inwieweit muss die Abfrage umgebaut werden?

    Der String wird erfolgreich zusammengebaut es steht nun Mr. Huber (sNName) Michael (sVName) Andreas (sWeitereVornamen) im Report der Abfrage. Die Sonderanreden wie "Baron von" werden aber ignoriert!

    Grüße
    Andreas
     
  2. ukulele

    ukulele Datenbank-Guru

    Also in deinem Konstrukt steht hinter tblReiseStamm.datTerminBis, ein + am Anfang der Spalte, dafür hinter tblKundeStamm.sWeitereVornamen ein Komma, müsste da nicht eher ein +sein um den Baron von dahinter zu verketten? Dannach geht es dann ja mit + und Leerschritt weiter, da wird also wieder verkettet.

    Was ist denn wenn tblKundeStamm.sWeitereVornamen z.B. NULL ist? Das wird gar nicht abgefangen und der Leerschritt davor wird in dem Fall nicht verworfen. Hinter Baron von und diversen anderen Einträgen sind manchmal Leerschritte, manchmal nicht.
     
  3. andi060283

    andi060283 Benutzer

    Im Quellcode ist ein Fehler, diese Zeile hinter "tblReiseStamm.datTerminBis," gehört gelöscht:
    Code:
     + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
    ob ich hinter 'Baron von' einen Leerschritt mache also 'Baron von ' ändert nichts am Verhalten. Meiner Meinung ist in der "case"-Anweisung der Fehler, jedoch weiß ich nicht nicht, wie ich den Code umschreiben kann damit die Sonderanreden in "nTitel2Kz" auch angezeigt werden!
     
  4. ukulele

    ukulele Datenbank-Guru

    Ich glaube du hast zuviele CASE eingebaut. Wenn ich mir das recht überlege suchst du doch eigentlich blos:
    Code:
    tblReiseStamm.datTerminVon,
    tblReiseStamm.datTerminBis,
      'sKunde' = ( case when [tblKundeStamm].[nAnredeKz] = 1 then 'Mr.  '
                       when [tblKundeStamm].[nAnredeKz] = 6 then 'Mrs. '
                       when [tblKundeStamm].[nTitel2Kz] = 4 then 'van der '
                       when [tblKundeStamm].[nTitel2Kz] = 22 then 'Ffr von '
                       when [tblKundeStamm].[nTitel2Kz] = 25 then 'Baron von '
                       when [tblKundeStamm].[nTitel2Kz] = 19 then 'Consul '
                       else ''
                       end ) + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
    'sUser' = system_user
    oder
    Code:
    tblReiseStamm.datTerminVon,
    tblReiseStamm.datTerminBis,
      'sKunde' = ( case [tblKundeStamm].[nAnredeKz]
                       when 1 then 'Mr.  '
                       when 6 then 'Mrs. '
                       when 4 then 'van der '
                       when 22 then 'Ffr von '
                       when 25 then 'Baron von '
                       when 19 then 'Consul '
                       else ''
                       end ) + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
    'sUser' = system_user
    Das sind die beiden Schreibweisen die ich kenne und erstere nutze ich auch. Mit deiner bin ich nicht vertraut, mag gehen (Syntaxprüfung sagt ok) aber ist mir nicht geläufig daher hab ich mich da jetzt nicht mit befasst.
     
  5. andi060283

    andi060283 Benutzer

    Danke für deinen Beitrag. Noch immer wird leider "nTitel2Kz" ignoriert. Es wird dann nur die Anrede also das Feld von [tblKundeStamm].[nAnredeKz] also Mr. oder Mrs. und der Vorname, weitere Vorname, Name angezeigt also in meinem Beispiel Mr. Huber Gerhard. Das Feld von [tblKundeStamm].[nTitelKz] z.B. Baron wird ignoriert. Entferne ich aber die Zeilen von [tblKundeStamm].[nAnredeKz] und starte den case bei [tblKundeStamm].[nTitel2Kz] dann wird Baron Huber Gerhard angezeigt, dann fehlt jedoch "Mr". Ziel soll sein, dass "Mr. Baron Huber Gerhard" angezeigt wird.
     
  6. ukulele

    ukulele Datenbank-Guru

    Ach jetzt sehe ich erst das es um 2 Spalten im CASE geht, dann:
    Code:
      'sKunde' = ( case when [tblKundeStamm].[nAnredeKz] = 1 then 'Mr.  '
                       when [tblKundeStamm].[nAnredeKz] = 6 then 'Mrs. '
                      else ''
                      end ) +
               ( case when [tblKundeStamm].[nTitel2Kz] = 4 then 'van der '
                       when [tblKundeStamm].[nTitel2Kz] = 22 then 'Ffr von '
                       when [tblKundeStamm].[nTitel2Kz] = 25 then 'Baron von '
                       when [tblKundeStamm].[nTitel2Kz] = 19 then 'Consul '
                       else ''
                       end ) + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
    Denn, es kann ja beides gesetzt sein. Das CASE läuft bis die erste Bedingung erfüllt ist. Bricht also ggf. bei Mr. ab und berücksichtigt dann nicht nTitel2Kz. Folglich musst du beide Spalten getrennt berücksichtigen und ggf. verketten.
     
  7. andi060283

    andi060283 Benutzer

    JA :) Jetzt hat´s funktioniert - DANKE:)
     
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