Hallo,
ich programmiere derzeit in SQL Server Express 2005 eine kleine Anwendung in der ich a) entweder alle Adressen anzeigen lassen möchte oder b) die Anzeige über 2 Textboxen (tbNachname und tbOrt) filtern möchte.
Hier die beiden Paramter:
<asp:ControlParameter ControlID="tbNachname" Name="tbNachname" PropertyName="Text" />
<asp:ControlParameter ControlID="tbOrt" Name="tbOrt" PropertyName="Text" />
Hier nun der (falsche) SELECT-Befehl:
SELECT Vorname, Nachname, Ort, ID FROM Zuechter WHERE (Nachname LIKE @tbNachname) AND (Ort LIKE @tbOrt) OR (Nachname LIKE @tbNachname) OR (Ort LIKE @tbOrt)
Was mache ich falsch? Wie kann ich dem SELECT-Befehl mitteilen, dass er falls beide Textfelder einen Eintrag haben, diese auch beide zum Filtern nehmen soll oder dass er wenn keins der beiden Textfelder einen Text enthält, alle Daten (ohne Filter) anzeigen soll?
Danke für Eure Hilfe.
Gruß
Maximus.
Die Schnecke kann Dir mehr über den Weg erzählen als der Hase.
Was bei dir falsch bzw. fehlt, ist die richtige Klammersetzung, durch die ORs hebelst du das AND aus ... Besser find ich sowieso die Lösung:
CREATE PROCEDURE usp_Test
@nachname as varchar(16),
@ort as varchar(16)
AS
SELECT * FROM (
SELECT 'Bauer' as Nachname,'Wien' as Ort
UNION
SELECT 'Maier' as Nachname,'Graz' as Ort
UNION
SELECT 'Bauer' as Nachname,'Graz' as Ort
UNION
SELECT 'Maier' as Nachname,'Wien' as Ort
) data
WHERE (Nachname like Isnull(@nachname,'%') AND Ort like IsNull(@ort,'%'))
GO
exec usp_Test 'Bauer','Wien'
exec usp_Test 'Bauer',null
exec usp_Test null,null
exec usp_Test null,'Graz'
-----------------------------------------------------------
Nachname Ort
-------- ----
Bauer Wien
(1 row(s) affected)
Nachname Ort
-------- ----
Bauer Graz
Bauer Wien
(2 row(s) affected)
Nachname Ort
-------- ----
Bauer Graz
Bauer Wien
Maier Graz
Maier Wien
(4 row(s) affected)
Nachname Ort
-------- ----
Bauer Graz
Maier Graz
(2 row(s) affected)
Super,
hat funktioniert, danke für den tollen Beitrag.
Nur noch eine Frage zum Verständnis:
Was bewirkt (Nachname LIKE ISNULL(@Nachname,'%') genau?
Wenn Nachnake NULL ist nix nehmen ansonsten @Nachname?
Kann man das so übersetzen?
Welchen Zweck hat das '%'?
Danke für Deine Hilfe.
Gruß Maximus.
Die Schnecke kann Dir mehr über den Weg erzählen als der Hase.
Super,
hat funktioniert, danke für den tollen Beitrag.
Nur noch eine Frage zum Verständnis:
Was bewirkt (Nachname LIKE ISNULL(@Nachname,'%') genau?
Wenn Nachnake NULL ist nix nehmen ansonsten @Nachname?
Kann man das so übersetzen?
Welchen Zweck hat das '%'?Danke für Deine Hilfe.
Gruß Maximus.
(Nachname LIKE ISNULL(@Nachname,'%')
Wenn Nachname != null wird @Nachname genommen, ansonsten alles (% = wildcard der soviele zeichen wie möglich nimmt, da es hier alleine steht -> alles)
Was bewirkt (Nachname LIKE ISNULL(@Nachname,'%') genau?
Tipp: Schau dir die Hilfe zu IsNull() und die Hilfe zu '%' (Wildcards) an
--> RTFM