Announcement

Collapse
No announcement yet.

When, then in einer Prozedur ??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • When, then in einer Prozedur ??

    Hallo Profis,
    benötige noch eine schnelle Hilfe zu einem Syntax:
    ich möchte innerhalb einer Prozedur ein weiteres Kriterium einbauen, das aber nur dann gilt wenn ein bestimmter Parameter gesetzt ist.

    Wenn xxx = 123
    dann
    yyyy
    ansonsten
    weiter

    Beispiel
    ------
    ...
    AND

    if @last = '123'
    (dbo.MaengelVerlauf.MAusfID = 11)
    else
    end


    AND
    ...
    ------

    Habe es auch schon mit When und then versucht, aber leider negativ

    Im ersten Fall (if, else) kommt folgende Fehlermeldung.

    Msg 156, Level 15, State 1, Procedure sp_BDR_Mängelabfrage_FF, Line 74
    Incorrect syntax near the keyword 'if'.
    Msg 102, Level 15, State 1, Procedure sp_BDR_Mängelabfrage_FF, Line 75
    Incorrect syntax near 'dbo'.

    Im Vorraus besten Dank für die Hilfe!

  • #2
    Hallo sruhsam,

    CASE WHEN THEN war schon ganz richtig.
    [highlight=sql]SELECT CASE WHEN xxx = 123 THEN yyy ELSE ... END AS Feld,[/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo O.Helper,
      habe versucht dies in meine Prozedur (rot) einzubinden,
      bekomme aber noch immer ne Fehlermeldung:

      Msg 102, Level 15, State 1, Procedure sp_BDR_Mängelabfrage_FF, Line 77
      Incorrect syntax near '='.

      Prozedur:

      (COALESCE (dbo.Melder.geobezeichnung, dbo.Meldergruppe.geobezeichnung, Anlage.geobezeichnung) LIKE '%' + @geb + '%') AND
      (dbo.MaengelListe.MangelID LIKE '%' + @mid + '%')

      AND

      CASE WHEN @last like 123 THEN
      (dbo.MaengelVerlauf.MAusfID = 11)
      ELSE END


      AND

      -------
      --beginn
      --falls Prozentzeichen im Eingabefeld @vonFertigDatum oder @bisFertigDatum dann '1=1' und dies bedeutet "wahr"
      --ansonsten '1=0' und dies bedeutet "falsch"
      ( 1= case when isnull(@vonFertigDatum, '') = '%' or isnull(@bisFertigDatum, '') = '%' then 1 else 0 end

      Comment


      • #4
        CASE WHEN @last like 123 THEN (dbo.MaengelVerlauf.MAusfID = 11) ELSE END
        Wenn Du keinen ELSE Zweig hast, dann lass ihn weg.

        Und was genau machst Du da überhaupt, das kann man aus dem Fragement nicht erkennen?
        Ist das eine WHERE Bedingung?
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          ok,

          habe als Beispiel eine Prozedur in der ich im where bereich nach versch. Kriterien mit Parameter Abfrage. Nun habe ich auch ein Parameter (@last) und je nachdem was dort drin steht soll ein weiteres Kriterium angezogen werden.
          In meinem Beispiel ist das der Wert '123'. Nur wenn dieser im Parameter übergeben wird, soll das zusätzliche Kriterium gelten, ansonsten nicht. Im weiteren Anschluß der Prozedur kommen nur noch weitere Kriterium, die unrelevant sind.

          Where
          (Anlage.aktiv = - 1) AND
          (dbo.Meldergruppe.aktiv = - 1) AND
          (dbo.MaengelListe.AnlageNr LIKE '%' + @anlnr + '%') AND

          CASE WHEN @last like 123 THEN
          (dbo.MaengelVerlauf.MAusfID = 11) AND
          END


          (dbo.Melder.aktiv = - 1)

          Die gesamte Prozedur sollte dann bei Kriterium @last like '123' wie folgt aussehen:
          Where
          (Anlage.aktiv = - 1) AND
          (Meldergruppe.aktiv = - 1) AND
          (MaengelListe.AnlageNr LIKE '%' + @anlnr + '%') AND
          (dbo.MaengelVerlauf.MAusfID = 11)
          (Melder.aktiv = - 1) AND

          ansonsten
          (Anlage.aktiv = - 1) AND
          (dbo.Meldergruppe.aktiv = - 1) AND
          (dbo.MaengelListe.AnlageNr LIKE '%' + @anlnr + '%') AND
          (dbo.Melder.aktiv = - 1)


          Sorry für die Missverständliche Darstellung.

          Gruß
          Sruhsam

          Comment


          • #6
            In so einem Fall würde ich nicht gerade eine Fallunterscheidung nutzen, sondern boolsche Algebra:

            [highlight=sql]Where (Anlage.aktiv = - 1)
            AND (dbo.Meldergruppe.aktiv = - 1)
            AND (dbo.MaengelListe.AnlageNr LIKE '%' + @anlnr + '%')

            AND (@last = 123 AND dbo.MaengelVerlauf.MAusfID = 11
            OR @last <> 123)

            AND(dbo.Melder.aktiv = - 1)[/highlight]

            Also entweder @last ist 123 (und nicht LIKE) und zugleich die ID = 11; oder eben nicht.
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Hallo O.Helper,
              super manchmal habe ich doch eine Hirnblockade.
              Besten Dank, funktioniert bestens.
              Übrigens, kann man hier im Forum seine Helfer auch beurteilen, du hättest von mir ein * bekommen.
              Gruß
              sruhsam
              PS: Ich denke wir hören noch voneinander....


              Originally posted by O. Helper View Post
              In so einem Fall würde ich nicht gerade eine Fallunterscheidung nutzen, sondern boolsche Algebra:

              [highlight=sql]Where (Anlage.aktiv = - 1)
              AND (dbo.Meldergruppe.aktiv = - 1)
              AND (dbo.MaengelListe.AnlageNr LIKE '%' + @anlnr + '%')

              AND (@last = 123 AND dbo.MaengelVerlauf.MAusfID = 11
              OR @last <> 123)

              AND(dbo.Melder.aktiv = - 1)[/highlight]

              Also entweder @last ist 123 (und nicht LIKE) und zugleich die ID = 11; oder eben nicht.

              Comment

              Working...
              X