Platzhalter für Zahlen

PeterW

Benutzer
Beiträge
12
Guten Morgen!

Die folgende Prozedur klappt nur wenn ich nach der Kundennummer nicht suchen. Wenn ich sie alse deaktiviere.

ALTER Proc [dbo].[spKundenSuchen]
--@KuNummer int = 0,
@Kunde varchar(50) = 0,
@Strasse varchar(50) = 0,
@Ort varchar(50) = 0,

Gibt es für Zahlen einen Platzhalter/joker?

Besten Kank für einen Tipp

mfg
Peter
 
Werbung:
Deine Prozedur ist unvollständig, was passiert nach dem letzten Komma?

Wird die Prozedur mit einem Wert für KuNummer aufgerufen? Was passiert in der Prozedur mit KuNummer?
 
Hallo!

Durch meine Recherchen ist mir aufgefallen das es bein Zahlen keinen Joker gibt.
Ich habe meine Prozedur umgestellt. Aber leider gibt es immer noch ein Problem.
Die komplette Anweisung:

ALTER Proc [dbo].[spSuchenKunden]
@Kunde varchar(50) = 0,
@Strasse varchar(50) = 0,
@PLZ varchar(10),
@Ort varchar(50) = null,
@KuNummer int = null

AS

SELECT Adressnummer,
CONCAT (Adresszeile_2,+' '+ Adresszeile_1) AS Kunde,
Strasse,
PLZ,
Ort
FROM dbo.tblKundenAdressen
where
(CONCAT (Adresszeile_2, +' '+ Adresszeile_1) LIKE @Kunde +'%' or @Kunde + '%' is null) AND
(Strasse LIKE @Strasse +'%' Or @Strasse is null) AND
(PLZ LIKE @PLZ +'%' or @PLZ is null) and
(Ort LIKE @Ort +'%' or @ort is null)
if @KuNummer= 0
Adressnummer > 0
else
Adressnummer = @KuNummer

Der Aufruf:
Exec dbo.spKundensuchen '','','','','0'

Ohne die ",'0' " klappt es wie gewollt. Bei leer werden alle angezeigt, Bei Einschänkungen die ausgewählten Daten .
Mit ",'0' " macht die If Else ein Problem.
Bei den Wert 0 (Null) sollten alle Adressen angezeigt werden.
Wenn ich Meine Frage jetzt Konkret stelle:
Ist ein If Else Konstukt in einer WHERE Bedinngung überhaupt zulässig?
Und wenn ja wie soll die Syntax richtig sein.
Beim Kombilieren Meckert SQL Bei der Adressnummer oder >
Ich habe mich bis jetzt nur mit Access betätigt. Da gab es diese Probleme nicht.

Besten Dank im voraus für einen Tipp"
Mfg

Peter
 
Werbung:
Also erstmal sind deine Default Werte ja großes Kauderwelsch. Warum füllst du eine Zeichenkette überhaupt erst mit einer 0 (dann auch noch als Integer und nicht als Zeichenkette) um es dann wieder mit "" zu überschreiben?

Das setzt sich dann fort in dem z.B. @Strasse IS NULL im WHERE-Teil geprüft wird aber warum eigentlich? Das kommt nur zur Anwendung wenn deine Funktion gezielt mit einem NULL Wert für @Strasse aufgerufen wird aber warum sollte man das tun wenn es am Ende sowieso "umgangen" wird? So ganz schlüssig ist das irgendwie nicht.

concat() ergibt auch keinen Sinn. Ein Plus oder ein Komma sind zuviel, wiso verkettest du gleichzeitig mit concat() und +?

Dein Problem wird allein durch die IF-Anweisung ausgelöst die dort völlig sinnfrei dran "geklebt" wurde. So wie es dort steht gibt es einen Select und dann, als neue Operation, eine IF-Anweisung. Das kann auch in Access eigentlich so nicht gehen.

Richtig wäre eine CASE-Anweisung in deiner Bedinung die du mit AND oder OR anhängst. Die Bedingungen sind überhaupt für alle Fälle eigentlich gleich, versuche also eine saubere Logik da rein zu bekommen.

Code:
ALTER PROCEDURE [dbo].[spSuchenKunden](
@Kunde VARCHAR(50),
@Strasse VARCHAR(50),
@PLZ VARCHAR(10),
@Ort VARCHAR(50),
@KuNummer INT)

AS

SELECT   Adressnummer,
       ltrim(rtrim(concat(Adresszeile_2,' ',Adresszeile_1))) AS Kunde,
       Strasse,
       PLZ,
       Ort
FROM   dbo.tblKundenAdressen
WHERE (   @Kunde IS NULL
OR       concat(Adresszeile_2,' ',Adresszeile_1) LIKE '%' + @Kunde +'%' )
AND   (   @Strasse IS NULL
OR       Strasse LIKE '%' + @Strasse +'%' )
AND (   @PLZ IS NULL
OR       PLZ LIKE '%' + @PLZ +'%' )
AND   (   @Ort IS NULL
OR       Ort LIKE '%' + @Ort +'%' )
AND   (   isnull(@KuNummer,0) = 0
OR       Adressnummer = @KuNummer )
Damit sollte es egal sein ob du "", NULL oder einen Wert als Variable übergibtst.
 
Zurück
Oben