Re: WHERE-Klausel

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



Hallo Michael,

"Michael Bayer" <spamentsorgung@xxxxxxx> schrieb im Newsbeitrag
news:u2mfgux$FHA.4028@xxxxxxxxxxxxxxxxxxxx

> in meiner Applikation kann der Anwender verschiedene Bedingungen
> vorgeben, denen die von der Datenbank zurückzugebenden Datensätze
> entsprechen müssen, z.B.
>
....
> Auch das ist soweit kein Problem. Ich definiere die einzelnen
> Bedingungen als Parameter, die an die SP übergeben werden müssen
> (@PLZVon, @PLZBis, @ZAVon, @ZABis, @WFVon, @WFBis usw.).
>
> Die WHERE-Klausel lautet also beispielsweise:
>
> WHERE PLZ BETWEEN (@PLZVon AND @PLZBis)
> AND Zimmer BETWEEN (@ZAVon AND @ZABis)
> AND Wohnfläche BETWEEN (@WFVon AND @WFBis)
> AND Kaufpreis BETWEEN (@KPVon AND @KPBis)
> AND @Stellplatz = @SP
>
> usw.
>
> Aber: wie gehe ich vor, wenn der Anwender z.B. keinen PLZ-Bereich
> angibt oder wenn es ihm egal ist, ob ein Stellplatz vorhanden ist
> oder nicht?
> Die Parameter @PLZVon, @PLZBis und @Stellplatz müssen ja trotzdem an
> die SP übergeben werden, auch wenn sie gar nicht benötigt werden.
> Welche Werte übergebe ich diesen Parametern in diesem Fall und wie
> sieht die WHERE-Klausel aus?

Wenn man dynamisches SQL in Stored Procedures (SP) verwendet, dann hat man
eigentlich keinen echten Vorteil von den SP. Weiterhin ist zu beachten, dass
das dynamische SQL Statement im Kontext des aufrufenden User (SQL 2000)
ausgeführt werden muss und der User muss in der Regel SELECT-Berechtigungen
auf der Tabelle haben. Weiterhin ist der Code für das dynamische SQL nicht
einfach zu warten, da man sich leicht mit '-Zeichen verzählen kann und SQL
Injection ist bei dynamischem SQL nicht fern.

Wir vermeiden dynamisches SQL, wo es möglich ist:
(@p ist Parameter, der NULL ist, wenn dieser nicht verwendet werden soll.):

SELECT
....
WHERE
(col LIKE @p OR @p IS NULL)
AND
(....

oder wenn es eine Liste als Parameter ist (z. B. '1,2,3,4')
....
WHERE
....
col in (Select value From dbo.fn_split( @p, ','))
....
dbo.fn_split(), siehe
http://www.windowsitpro.com/Article/ArticleID/21071/21071.html?Ad=1

zu Deinem Beispiel:
Parameter: (@PLZVon, @PLZBis, @ZAVon, @ZABis, @WFVon, @WFBis usw.).
Für Parameter, die nicht gefüllt sind, kann man NULL übergeben.

....
WHERE
((PLZ BETWEEN (@PLZVon AND @PLZBis)) OR @PLZVon IS NULL OR @PLZBis IS NULL)
AND
(...)
AND
....

Gruß Olaf
--
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)


.



Relevant Pages

  • Re: Problem mit Abfrage
    ... SELECT isnull,0) FROM WHERE ... Statt dessen würde ich die Datumsfunktionen vom SQL Server nutzen und folgendes machen: ... AND year= 2007 ... Einen Index wird der SQL Server wohl bei beiden Abfragen benutzen. ...
    (microsoft.public.de.sqlserver)
  • Re: Where-Klausel bedingen?
    ... > WHERE Is Not Null) AND ... Fluch und Segen von Dynamic SQL: ...
    (microsoft.public.de.access.clientserver)
  • Re: Kopieren offener Datenbanken...
    ... Programme / Dienste reicht es zu beenden, damit Datenbanken sicher ... To copy a data base in SQL Server, the best option is to use ... You run these commands from with in a query window. ... name1 and name2 are the names in the rightmost column in the output. ...
    (comp.databases.ms-sqlserver)
  • Re: Probleme mit der SELECT DISTINCT Anweisung
    ... Migration auf den SQL Server entstehen werden. ... aber first und last wird der nicht kennen. ... > AND Anrufe.HandyNr='01712234321' ... > GROUP BY Telefonnummer; ...
    (microsoft.public.de.access)
  • Re: Frage zu Stored Procedures
    ... Der eine ist "dynamisches SQL". ... SQL-String und führst ihn mit EXEC aus. ... Das Hauptproblem ist unter anderem ein fehlender Abfrageplan ...
    (microsoft.public.de.sqlserver)