Dr.Verpeilung 10 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Hallo Zusammen, ich entwickle derzeit eine Anwendung auf VB2008 in Anbindung an SQL2005/2008. In der Anwendung gibt es insgesamt 5 Felder in denen man Suchbegriffe eingeben kann. Gebe ich nirgendwo etwas ein, sollen alle Inhalte der Tabelle zurückgeliefert werden. Mein Statement sieht so aus: Select * From Medien Where Nr LIKE @Nr And Beschreibung LIKE @Beschreibung And verliehen LIKE @verliehen AND verliehen_an LIKE @verliehen_an Für den Fall dass nichts eingegeben wird, füllt sich der @-Parameter mit einem '%' was in SQL ja als Platzhalter gilt... Soweit so gut... Das funktioniert auch ganz gut, ausser dass die Spalten verliehen und verliehen_an NULLS enthalten dürfen (muss auch so sein). Da funktioniert das '%' natürlich nicht, daher kommt kein Ergebnis zurück. Ich könnte das zwar im Programmcode abfangen, aber dann müsste ich für diese Spalten etliche Select-Statements hinterlegen... <--- nicht schön. Hat jemand eine Idee wie man eine NULL-Spalte abfragen kann, ohne die übliche OR -Verknüpfung (also: Select * From Medien Where Nr LIKE @Nr And Beschreibung LIKE @Beschreibung And verliehen IS NULL Or verliehen IS NOT NULL....) Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Moin, so zu 100 Prozent verstehe ich es nicht, aber ginge nicht dies? Select * From Medien Where Nr LIKE @Nr And Beschreibung LIKE @Beschreibung And (verliehen LIKE @verliehen OR verliehen IS NULL) AND (verliehen_an LIKE @verliehen_an OR verliehen_an IS NULL) Gruß, Nils Zitieren Link zu diesem Kommentar
Dr.Verpeilung 10 Geschrieben 5. Mai 2009 Autor Melden Teilen Geschrieben 5. Mai 2009 Das ist ne Möglichkeit. Ich probiers mal. Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Hi, da der Parameter auch leer sein kann würde ich das im code abfangen und den Query dann nur so stricken wie du ihn brauchst. Dazu kannst du ja z. B. abfragen ob die Variable verliehen_an an einen Wert enthält und wenn ja das SQL statement um die and verknüpfung erweitern... Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Moin, da der Parameter auch leer sein kann würde ich das im code abfangen und den Query dann nur so stricken wie du ihn brauchst. Dazu kannst du ja z. B. abfragen ob die Variable verliehen_an an einen Wert enthält und wenn ja das SQL statement um die and verknüpfung erweitern... Vorsicht! Das kann bei großen Datenbeständen zu einer unnötig großen Abfragelast führen, weil man so jeden Datensatz einzeln abfragen würde. Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Moin, so zu 100 Prozent verstehe ich es nicht, aber ginge nicht dies? Select * From Medien Where Nr LIKE @Nr And Beschreibung LIKE @Beschreibung And (verliehen LIKE @verliehen OR verliehen IS NULL) AND (verliehen_an LIKE @verliehen_an OR verliehen_an IS NULL) Gruß, Nils Ich sag mal: So wird's nicht gehen, da auch bei ausgefülltem Parameter dann die NULLen zurück kommen. Ich wäre eher für nerd's Vorschlag, den WHERE-Teil quasi dynamisch abhängig von der Variablen zu erweitern (also jeweils das "AND verliehen LIKE @verliehen" etc. nur dann hinzufügen, wenn @verliehen befüllt ist) Die Abfrage läuft dann auch nur einmal am Ende, nachdem der Abfragestring fertig ist. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Würde ich acuh nur so machen. Zu Bednken: "Like"-Abfragen, vor allen Dingen mit Wildcards, sollten nur mit Bedacht eingesetzt werden, da damit quasi immer eine Volltextsuche gemacht wird. Nicht wirklich performant. -Zahni Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 5. Mai 2009 Melden Teilen Geschrieben 5. Mai 2009 Moin, Vorsicht! Das kann bei großen Datenbeständen zu einer unnötig großen Abfragelast führen, weil man so jeden Datensatz einzeln abfragen würde. Gruß, Nils Hi, ich kenne mich jetzt nicht so mit VB aus aber in den Sprachen ich denen ich unterwegs bin (oder besser war), kostet das Abfragen einer Varibablen deutlich weniger Last als ein unnötiger Teil eines Datenbank queries. Ist das bei VB anderst? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.