Jump to content
PeterWa

Probleme mit Where

Recommended Posts

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

 

 

 

 

Share this post


Link to post
Share on other sites

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.

Edited by wznutzer

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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

 

Edited by wznutzer

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...