2017-09-20 5 views
-4

Cette procédure stockée sous remplit mon paramètre Projectphase. Comme vous pouvez le voir, l'utilisateur doit d'abord sélectionner @PurchaseOrder, qui remplira alors le paramètre Projectphase.Valeurs NULL dans le paramètre multivaleur

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

Maintenant, lorsque l'utilisateur sélectionne un PurchaseOrder qui a en effet Projectphases, tout va bien. Le problème se situe dans les ordres de vente qui n'ont pas de ProjectPhase.

La requête utilisée pour mon ensemble de données affiché dans le rapport comporte la ligne suivante dans la clause WHERE. C'est un paramètre à plusieurs valeurs, car l'utilisateur doit être capable de sélectionner plusieurs phases de projet.

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

J'ai essayé UNIONS avec NULL, NULL. J'ai essayé des choses avec ISNULL mais je n'arrive pas à obtenir la requête à exécuter quand @ProjectPhase est NULL.

Un peu d'aide serait grandement apprécié parce que je me suis cassé la tête dessus trop longtemps maintenant. Merci

+0

si @Phase est nul alors il est logique que l'ensemble de données retourne vide. – Jayvee

+0

oui je sais, mais comment puis-je le faire ne pas être vide. Est-ce juste un petit ajustement dans ma clause where? Projectphase doit être capable d'avoir plusieurs valeurs ou d'avoir une valeur NULL. –

+0

Peut-être que je vais avoir un moment de densité améliorée, mais il n'est pas clair si vous voulez être en mesure de récupérer des lignes où 'ProjectPhaseId' est en fait NULL. Quelque chose comme 'WHERE reg.ProjectPhaseId IN (SELECT Valeur de fnLocal_CmnParseList (@Phase, ',')) ou (@Phase est NULL et reg.ProjectPhaseId est NULL)'. Peut-être que vous pourriez clarifier avec quelques exemples de données. – HABO

Répondre

1

a finalement trouvé la réponse:

[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 

Dans ma requête, j'ai changé la clause WHERE pour:

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

donc @phase n'est pas dérivé de la phase mais de ProjectPhaseID ?? – Jayvee