Bonjour à tous,
Je cherche à écrire une procédure stockée qui, en fonction du paramètre ne va pas restreindre selon le même nombre de champs.

Si le paramètre vaut 1,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
WHERE 
			ISNUMERIC(Q1) = 1
		AND ISNUMERIC(Q2) = 1
		AND ISNUMERIC(Q3) = 1
		AND ISNUMERIC(Q4) = 1
		AND ISNUMERIC(Q5) = 1
		AND ISNUMERIC(Q6) = 1
Si le paramètre vaut 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
WHERE 
			ISNUMERIC(Q1) = 1
		AND ISNUMERIC(Q2) = 1
		AND ISNUMERIC(Q3) = 1
		AND ISNUMERIC(Q4) = 1
		AND ISNUMERIC(Q5) = 1
		AND ISNUMERIC(Q6) = 1
		AND ISNUMERIC(Q7) = 1
		AND ISNUMERIC(Q8) = 1
le tout est utilisé dans un UNPIVOT de la manière suivante :
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
SELECT
 
.......
	, quest.NUM_QUESTION AS NumQuestion
	, quest.LIB_QUESTION AS LibQuestion
	, NoteEval
FROM 
	dbo.T_NRM_INSCRIPTIONS ins
.....
 
	JOIN (SELECT 
		eval.N_INSCRIPTION, eval.EVAL_CODE_STAGE, eval.EVAL_CODE_SESSION
		, N_TYPE_QUEST
		, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14
	FROM Prn_Dwh_Acc.dbo.T_ACC_T_EVALUATIONS eval
	WHERE 
			ISNUMERIC(Q1) = 1
		AND ISNUMERIC(Q2) = 1
		AND ISNUMERIC(Q3) = 1
		AND ISNUMERIC(Q4) = 1
		AND ISNUMERIC(Q5) = 1
		AND ISNUMERIC(Q6) = 1
		AND N_TYPE_QUEST = @NumTypeQuestion) p
UNPIVOT 
	(NoteEval FOR Question IN (Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14)) AS unpvt
		ON unpvt.N_INSCRIPTION = ins.Inscription_Id
	JOIN Prn_Dwh_Acc.dbo.T_ACC_T_QUESTIONS quest
		ON quest.N_TYPE_QUEST = unpvt.N_TYPE_QUEST
WHERE 
	'Q' + cast(quest.NUM_QUESTION AS VARCHAR(4))= Question
.......
C'est en fonction de ce paramètre @NumTypeQuestion que je veux récupérer les question 1 à 6 ou 1 à 14.

Si je ne trouve pas je pensais faire une fonction en amont avec IF tout bête et qui appelle ensuite 2 PS différentes, mais je ne trouve aps ça très propre.

Merci à vous.