Hatte heute ein dummes Problem am SQL-Server 2000:
In einer Stored Procedure sollten Parameter übergeben werden die auch NULL Werte beinhalten können (Keine Eingabe im jeweiligen Suchfeld), allerdings werden diese Parameter in der Where-Clause alle zur Suche benötigt und sind mit AND verknüpft (einschränkende Suche, je mehr angegebene Parameter).
Gut zuerst ganz normal angelegt:
PROCEDURE GetGLAOrdersListbySearchParams
(
@Mandant varchar(3),
@SerivceCustomerNr varchar(10),
@ArticleNr varchar(18),
@SerialNr varchar(30),
@RepairStartFrom smalldatetime,
@RepairStartTo smalldatetime,
@RepairEndFrom smalldatetime,
@RepairEndTo smalldatetime
)
AS
SELECT ID, Mandant, ....(zur besseren Übersicht entfernt)
FROM GLAOrders
WHERE (Mandant = @Mandant) AND (SerivceCustomerNr = @SerivceCustomerNr) AND
(ArticleNr = isnull(@ArticleNr,ArticleNr )) AND
(SerialNr = isnull(@SerialNr,SerialNr)) AND
(ReparaturAnnahme >= isnull(@RepairStartFrom,ReparaturAnnahme)) AND
(ReparaturAnnahme <= isnull(@RepairStartTo,ReparaturAnnahme)) AND
(ReparaturAbschluss >= isnull(@RepairEndFrom,ReparaturAbschluss)) AND
(ReparaturAbschluss <= isnull(@RepairEndTo,ReparaturAbschluss))
So habe ich das bisher gelöst, wenn der Paramter NULL ist wird das Feld mit sich selbst verglichen liefert also true. Leider können in den Datumsfeldern auch NULL-Werte vorkommen, und SQL-Server ist der Meinung dass NULL <= NULL eben nicht gleich ist und lässt diese Sätze dann weg. Nach etwas hin und her folgendes probiert...
... AND
(CASE WHEN @RepairStartFrom IS NULL THEN
isnull(ReparaturAnnahme,1)
ELSE @RepairStartFrom END <= isnull(ReparaturAnnahme,1) ) AND ...
Eben für alle Datumsfelder wie oben und es funktioniert.... vielleicht gibts auch eine bessere oder einfachere Lösung aber so kommt zumindest das gewünschte Ergebnis...Share or Bookmark this post…
fc9eb277-7d91-44db-81e4-613d50b256eb|0|.0