Bonjour à tous,
Débutant en requêtes SQL, je suis en train d'essayer de faire une requête sur laquelle je me casse la tête depuis quelques jours à cause de ma clause WHERE. Je précise que je suis sous SQL Server 2017 et que j'utilise SSMS 19.1.
C'est une procédure stockée à laquelle je passe 3 paramètres depuis un logiciel.
J'aimerais que quand un ou plusieurs de mes 3 paramètres on la valeur NULL (par défaut), la clause WHERE ne filtre plus le (ou les) paramètre(s) concerné(s) et non pas qu'elle me filtre sur les valeurs NULL de la colonne.
Sinon la requête fonctionne très bien et n'a pas de soucis. C'est le problème de WHERE avec les valeurs NULL. J'ai essayé avec CASE mais sans succès.
J'espère avoir été assez clair sur mon problème. Je suis preneur de toutes vos idées.
Merci à tous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 @CodeZone CHAR(3) = NULL, @CodeTypeContenant CHAR(3) = NULL, @CodeClassification CHAR(3) = NULL SELECT T_PRODUIT.C_IdProduit AS [Id produit], T_PRODUIT.C_Identifiant AS [Identifiant], T_PRODUIT.C_Nom AS [Nom], T_PRODUIT.C_Producteur AS [Producteur], T_CLASSIFICATION.C_Code AS [Code classification], T_CONTENANT.C_Code AS [Code contenant], T_ANALYSE.C_Code AS [Code analyse] FROM T_PRODUIT LEFT JOIN T_CONTENANT ON T_PRODUIT.C_IdContenant = T_CONTENANT.C_IdContenant LEFT JOIN T_CLASSIFICATION ON T_PRODUIT.C_IdClassification = T_CLASSIFICATION.C_IdClassification LEFT JOIN T_ANALYSE ON T_ANALYSE.C_IdAnalyse = T_PRODUIT.C_IdAnalyse LEFT JOIN T_TYPE_CONTENANT ON T_CONTENANT.C_IdTypeContenant = T_TYPE_CONTENANT.C_IdTypeContenant LEFT JOIN T_ZONE ON T_CONTENANT.C_IdZone = T_ZONE.C_IdZone WHERE (T_ZONE.C_Code = @CodeZone OR T_CONTENANT.C_IdZone IS NULL) AND (T_TYPE_CONTENANT.C_Code = @CodeTypeContenant) AND (T_CLASSIFICATION.C_Code = @CodeClassification) ORDER BY T_PRODUIT.C_Identifiant
Partager