2017-09-20 3 views
-4

Diese gespeicherte Prozedur unterhalb füllt meine Projectphase Parameter. Wie Sie sehen können, muss der Benutzer zuerst @PurchaseOrder auswählen, was dann den Projectphase-Parameter füllt.NULL Werte in mehrwertigen Parameter

CREATE PROCEDURE [dbo].[USP_GetProjectPhase] 
    @PurchaseOrder INT 
AS 
    SELECT  
     pp.ProjectPhaseID, pp.Phase 
    FROM   
     ProjectPhase pp 
    WHERE  
     @PurchaseOrder = pp.PurchaseOrderId 

Nun, wenn der Benutzer ein PurchaseOrder auswählt, die in der Tat Projectphases hat, geht alles gut. Das Problem liegt in den Kaufaufträgen, die keine ProjectPhase haben.

Die Abfrage, die für meine im Bericht angezeigte Datenmenge verwendet wird, hat die folgende Zeile in der WHERE-Klausel. Es ist ein mehrwertiger Parameter, da der Benutzer mehrere Projektphasen auswählen kann.

WHERE 
    reg.ProjectPhaseId IN (SELECT Value 
          FROM fnLocal_CmnParseList(@Phase,',')) 

Ich habe UNIONS mit NULL, NULL versucht. Ich habe Zeug mit ISNULL versucht, aber ich kann nicht scheinen, die Abfrage zu erhalten, wenn @ProjectPhase NULL ist.

Einige Hilfe würde sehr geschätzt werden, weil ich mir jetzt schon zu lange den Kopf zerbrochen habe. Dank

+0

wenn @Phase null ist, dann macht es Sinn, dass der Datensatz leer zurückgibt. – Jayvee

+0

ja ich weiß, aber wie kann ich es nicht leer machen. Ist es nur eine kleine Anpassung in meiner Where-Klausel? Die Projektphase muss mehrere Werte haben oder einen NULL-Wert haben können. –

+0

Vielleicht habe ich einen Moment der erweiterten Dichte, aber es ist nicht klar, ob Sie in der Lage sein wollen, Zeilen, in denen "ProjectPhaseId" tatsächlich NULL ist, abrufen zu können. Etwas wie 'WHERE reg.ProjectPhaseId IN (SELECT Wert FROM fnLocal_CmnParseList (@Phase, ',')) oder (@Phase ist NULL und reg.ProjectPhaseId ist NULL)'. Vielleicht könnten Sie mit einigen Beispieldaten klären. – HABO

Antwort

1

fand schließlich die Antwort:

[dbo].[USP_GetProjectPhase] @PurchaseOrder INT 
AS 

SELECT  -1 AS 'ProjectPhaseID' 
      ,'No Filter' AS 'Phase' 
UNION 
SELECT  pp.ProjectPhaseID 
      ,pp.Phase 

FROM  ProjectPhase pp 
WHERE  @PurchaseOrder = pp.PurchaseOrderId 

In meiner Anfrage ich die WHERE-Klausel geändert:

WHERE (reg.ProjectPhaseId IN (SELECT Value FROM fnLocal_CmnParseList(@Phase,',')) OR @Phase = '-1') 
+0

so @phase wird nicht von der Phase abgeleitet, sondern von ProjectPhaseID ?? – Jayvee

Verwandte Themen