PeterWa 0 Geschrieben 28. Januar 2019 Melden Teilen Geschrieben 28. Januar 2019 Hallo und Guten Tag! Zuerst einmal ich bin neu im Forum. Ich habe mich bis jetzt mit Access "gespielt" und habe mir in den Kopf gesetzt meine Anwendung in SQL Server zu migrieren. Mein Thema Probleme mit Where ist vielleicht nicht ganz treffend. Ich versuche es aber trotzdem. Ich erstelle derzeit ein Formular Rechnungen suchen.Die Procedur: ALTER Proc [dbo].[spSuchenRechnung] @Kunde varchar(50) = 0, @Strasse Varchar(50) = 0, @PLZ varchar(10) = 0, @Ort varchar(50) = 0, @DatumVon date = Null, @DatumBis date = Null, @RgBetragVon Money = 0, @RgBetragBis Money = 0, @RGvon int = 0, @RgBis int = 0 AS SELECT * FROM dbo.tblRechnung LEFT JOIN dbo.tblKundenAdressen ON dbo.tblRechnung.Kundennummer = dbo.tblKundenAdressen.Adressnummer WHERE (CONCAT (Adresszeile_2, Adresszeile_1) LIKE @Kunde +'%') and -- or @Kunde + '%' is null) AND Strasse LIKE @Strasse +'%' and -- Or @Strasse is null AND PLZ LIKE @PLZ +'%' and --or @PLZ +'%' is null and Ort LIKE @Ort +'%' and ---or @ort +'%' is null and Rechnungsdatum Between @Datumvon and @Datumbis And Rechnungspreis Between @RgBetragVon and @RgBetragBis and Rechnungsnummer Between @rgvon And @rgbis ORDER BY dbo.tblRechnung.Rechnungsnummer, CONCAT (Adresszeile_2, Adresszeile_1); Zu meiner Frage: Ist es möglich in einer Where Bedingung eine Case function einzubauen? Wenn ich der Rechnungsnummer 0 (Null) übergebe dann sollen alle DS angezeibgt werden ansonsten die angegebene Nr Etwa so: Case @rgvon WHEN = 0 Then Rechnungsnummer > 0 When <> 0 Then Rechnungsnummer =@rgvon Ich müsste bei der RgNr nicht 2 Werte übergeben. Ich hoffe das ich mein Problem verständlich dargestellt habe. mfg Peter und schöne grüße aus Wien Zitieren Link zu diesem Kommentar
wznutzer 35 Geschrieben 29. Januar 2019 Melden Teilen Geschrieben 29. Januar 2019 (bearbeitet) Hallo, du könntest das so machen: declare @sParam varchar(10); -- Beispiel, das ist natürlich dein Übergabeparameter select Feld from Tabelle where FeldBedingung = @sParam or @sParam is null Wenn du Tabellen mit sehr vielen Datensätzen hast, kannst du dir merken, dass ein "or" möglichst zu vermeiden ist. Mit viel meine ich jetzt aber nicht ein paar 1.000 sondern eher ein paar Nullen mehr. "Null" ist natürlich etwas anderes als 0. bearbeitet 29. Januar 2019 von wznutzer Zitieren Link zu diesem Kommentar
PeterWa 0 Geschrieben 30. Januar 2019 Autor Melden Teilen Geschrieben 30. Januar 2019 Hallo und Guten Morgen! Ich sollte meine Frage eigentlich anders stellen: Wie kann ich einer Variablen einen Standartwert zuweisen. Beim Aufruf mit Exec ist der Wert in @Betrag von und @Betragbis 0 Das der Filter nicht funktionieren kann ist wohl klar ........ Rechnungspreis Between @BetragVon and @BetragBis, and ...... Der Wert der Variablen @Betragbis sollte zB. "999999" sein SQL Server ist halt nicht VBA. Meine Versuche mit If und Case brachten leider auch nicht den gewünschten Erfolg. LG Peter Zitieren Link zu diesem Kommentar
zahni 550 Geschrieben 30. Januar 2019 Melden Teilen Geschrieben 30. Januar 2019 Dann schreibe beim Where doch einen festen Wert. Was soll da die Variable bringen? Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 30. Januar 2019 Melden Teilen Geschrieben 30. Januar 2019 Unterschied SET und SELECT: http://www.insidesql.org/blogs/frankkalis/2004/07/13/der-unterschied-zwischen-set-und-select Wenn Du mit unterschiedlichen WHERE-Bedingungen arbeiten möchtest, wäre dynamisches SQL eine weitere Möglichkeit. http://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen Oder eben in Stored Procedures unterschiedliche Statements erstellen und auf die Variablen reagieren. Zitieren Link zu diesem Kommentar
wznutzer 35 Geschrieben 5. Februar 2019 Melden Teilen Geschrieben 5. Februar 2019 (bearbeitet) Am 30.1.2019 um 08:46 schrieb PeterWa: Ich sollte meine Frage eigentlich anders stellen: Wie kann ich einer Variablen einen Standartwert zuweisen. Beim Aufruf mit Exec ist der Wert in @Betrag von und @Betragbis 0 Das der Filter nicht funktionieren kann ist wohl klar Rechnungspreis Between @BetragVon and @BetragBis, and Der Wert der Variablen @Betragbis sollte zB. "999999" sein Ehrlich gesagt bin ich mir nicht sicher ob mir klar ist was du willst. Deine Fragestellung ist nicht eindeutig. Du willst eine Prozedur erstellen. Diese Prozedur soll Übergabeparameter haben. Du willst für mehrere Aufgaben nur eine Prozedur haben. Das willst du erreichen indem du die Parameter wahlweise mit null oder einem Wert belegst. Du machst ein "null" wenn der Parameter nicht berücksichtigt werden soll. Eine Variante habe ich dir oben gezeigt. Mit einem between geht das auch. select * from Tabelle where Betrag between coalesce(@Von, 0) and coalesce(@Bis, 9999999999) Einer Variable kannst du z. B. wie folgt einen Wert zuweisen. declare @Variable numeric(15,2); set @Variable = 50; Wenn du in der Parameterliste einer Prozedur einen Standardwert angeben willst, das geht auch: create procedure sp_MachHaltWas @nOption1 int, @nOption2 int = 5 --Wenn du diese Prozedur mit dem Standardparameter aufrufen willst, macht man das z.B. so exec sp_MachHaltWas 5, default bearbeitet 5. Februar 2019 von wznutzer Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.