Jump to content

Probleme mit Where


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

 

 

 

 

Link zu diesem Kommentar

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 von wznutzer
Link zu diesem Kommentar

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

 

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
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 von wznutzer
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...