Benutzer mit den meisten Antworten
gespeicherte Prozedur mit if - else

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
Antworten
-
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 16. April 2021 09:08
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Mittwoch, 5. Mai 2021 13:43
-
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
- Bearbeitet Stefan FalzModerator Dienstag, 13. April 2021 08:18
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 16. April 2021 09:08
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Mittwoch, 5. Mai 2021 13:43
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 -
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 16. April 2021 09:08
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Mittwoch, 5. Mai 2021 13:43
-
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
- Bearbeitet Stefan FalzModerator Dienstag, 13. April 2021 08:18
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 16. April 2021 09:08
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Mittwoch, 5. Mai 2021 13:43
-
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ß,
DimitarBitte 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.