none
gespeicherte Prozedur mit if - else RRS feed

  • Frage

  • Hallo zusammen,

    ich bin dabei mich in TSQl einzuarbeiten und bin dabei auf ein Problem gestossen für das ich keine Lösung finde:

    CREATE PROZEDURE XXX

    @Beginn datetime;
    @Ende datetime;

    @StatusID int

    AS

    SELECT TerminID, Termin Beginn, Ende, StatusID FROM tblTermine

    WHERE Beginn >= @Beginn AND Ende  <= @Ende

    AND

    IFStatusID = 0

         StatusID >0

     ELSE

        StatusID = @StatusID

    die Prozedur funktioniert ohne das IF-Else-Konstrukt einwandfrei, mit dem IF-Else-Konstrukt nicht.

    Was mache ich hier falsch?

    Danke für Hinweise

    Gruß

    Michael

    Dienstag, 13. April 2021 06:48

Antworten

Alle Antworten

  • Hallo Michael,

    Du kannst das Feld StatusID in der Tabelle auf diese Art nicht abfragen und auch nicht aktualisieren. Zudem ist StatusID > 0 als Zuweisung nicht möglich.

    Die Frage ist daher: Was genau willst Du da eigentlich machen?



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 13. April 2021 07:09
    Moderator
  • Hallo Stefan,

    wenn der Parameter @StatusID mit -1 übergeben wird, soll der Filter "StatusID > 0" , also alle Stati gesetzt werden, im anderen Fall soll der Filter auf den gewünschten Status gesetzt werden.

    Gruß Michael

    Dienstag, 13. April 2021 07:26
  • Hallo Michael,

    ach so, das geht so in der Form nicht.

    Probier es mal so:

    SELECT ...
    FROM   tblTermine
    WHERE  (
               ( @StatusID <= 0 AND StatusID > 0 )
            OR ( @StatusID  > 0 AND StatusID = @StatusID )
           )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 13. April 2021 07:44
    Moderator
  • Herzlichen Dank Stefan!

    Können in gespeicherten Prozeduren generell keine IF-Else-Konstrukte verwendet werden?

    Oder wo habe ich da einen Knoten in meinen Gedanken?

    Gruß Michael

    Dienstag, 13. April 2021 07:52
  • Hallo Michael,

    klar kannst Du IF ELSE ... in Prozeduren verwenden. Aber das, was Du da machen willst, ist die dynamische Zusammenstellung einer SELECT Abfrage. Und das geht in der Form nicht.

    Innerhalb eines DML Statements kannst Du CASE WHEN ... verwenden.

    SELECT ...
    FROM   tblTermine
    WHERE  @StatusID = ( CASE WHEN @StatusID > 0 THEN StatusID ELSE @StatusID END )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Dienstag, 13. April 2021 08:06
    Moderator
  • Vielen Dank,

    wieder etwas dazu gelernt!

    Dienstag, 13. April 2021 08:10
  • Case-Ausdrücke sind überall erlaubt, wo ein <Ausdruck> zugelassen ist. Dies gilt sowohl bei Select-Auflistungen, Join-Beziehungen, Group By und Having-Ausdrücken.
    Dienstag, 13. April 2021 08:39
  • Hallo Michael,

    Wenn Deine Fragen beantwortet wurden, wäre es nett von Dir, wenn Du die entsprechenden Beiträge als Antwort markieren würdest. Dadurch wird die Lösung hervorgehoben und für künftige Leser dieses Threads übersichtlicher. Ich verweise Dich auf die Forenregeln:

    ·        Lösungsbeiträge als “Die Antwort“ markieren

    Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen.
    [Quelle: Forenregeln]

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 21. April 2021 08:07
    Moderator