Laden...

SELECT-Befehl mit mehreren Optionen

Erstellt von Maximus vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.350 Views
M
Maximus Themenstarter:in
97 Beiträge seit 2006
vor 16 Jahren
SELECT-Befehl mit mehreren Optionen

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.

T
574 Beiträge seit 2008
vor 16 Jahren

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)



M
Maximus Themenstarter:in
97 Beiträge seit 2006
vor 16 Jahren

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.

F
240 Beiträge seit 2006
vor 16 Jahren

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)

T
574 Beiträge seit 2008
vor 16 Jahren

Was bewirkt (Nachname LIKE ISNULL(@Nachname,'%') genau?

Tipp: Schau dir die Hilfe zu IsNull() und die Hilfe zu '%' (Wildcards) an
--> RTFM