Jump to content

Select Statement bei mehreren NULL Spalten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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....)

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...