Autor Beitrag
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 03.02.03 12:09 
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:

ausblenden 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. :wink:

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:

ausblenden 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