Hallo allesamt!
Ich habe gerade ein kniffliges Problem:
Ich baue gerade eine Stored Procedure, die Daten aus einer Tabelle herausholt. Um möglichst effektiv vorzugehen, will ich sämtliche Einschränkungen für das Holen der Daten als Parameter übergeben. Meine Felder, über die ich einschränke, sind alle Varchar-Felder.
So in etwa sieht mein Statement aus:
Quelltext
1: 2: 3: 4:
| select * from Tabelle where (Suchwort starting with :ParamSuchwort) and (Name1 starting with :ParamName1) and (Name2 starting with :ParamName2) |
Um evtl nicht benötigte Einschränkungen zu ignorieren, habe ich mir gedacht, dass in dem Falle der betroffene Parameter als Wert dann einfach '' erhält, schliesslich startet jeder String im Endeffekt mit einer leeren Zeichenfolge.
Das Problem daran ist, daß, sobald ein Index auf das entsprechende Feld vorhanden ist, der IB-Server keine Datensätze zurückliefert bzw. nur die Datensätze, die wirklich nur '' im Feld enthalten.
Eine andere Vorgehensweise fiel auch ins Wasser:
Quelltext
1: 2: 3: 4:
| select * from Tabelle where ((:ParamSuchwort='') or (Suchwort starting with :ParamSuchwort)) and ((:ParamName1='') or (Name1 starting with :ParamName1)) and ((:ParamName2='') or (Name2 starting with :ParamName2)) |
Wenn ich so vorher den Parameter prüfe, ob er überhaupt gesetzt ist, ist die ganze Abfrage plötzlich unindiziert!
Weiss jemand Rat?
Cu,
Udontknow