Bonjour,
je souhaite construire une procédure stockée dynamique qui va me retourner une liste d'utilisateurs lors d'une recherche. Je construis la procédure de manière dynamique car on ne sait pas à l'avance combien de champs de recherche seront renseignés à l'appel de la procédure. Pour infos, les champs possibles sont Nom, Prenom, Academie et Structure. La recherche s'effectue toujours sur l'ensemble des champs renseignés avec comme opérande ET.
Voici mon code
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
GO
/*
	DESCRIPTION	
		Récupère la liste des utilisateurs d'une recherche
 
	PARAMETRES en Entrée:
		- @LastName le nom de famille de l'utilisateur.
		- @FirstName le prénom de l'utilisateur.
		- @Structure la structure à laquelle appartient l'utilisateur.
		- @Academy l'académie de l'utilisateur.
 
 
*/
 
ALTER PROCEDURE SPR_List_Search_Users
	@LastName			nvarchar(50),
	@FirstName			nvarchar(50),
	@Structure			nvarchar(50),
	@Academy			nvarchar(50)
AS
 
BEGIN
DECLARE
	@Select nvarchar(100),
	@From nvarchar(20),
	@Where nvarchar(max),
	@Param nvarchar(max),
	@ParamNom nvarchar(50),
	@ParamPrenom nvarchar(50),
	@ParamStructure nvarchar(50),
	@ParamAcademy nvarchar(50),	
	@cmd nvarchar(max)
 
	SET @ParamNom = ''
	SET @ParamPrenom = ''
	SET @ParamStructure = ''
	SET @ParamAcademy = ''
	SET @Select = 'SELECT 
			UserId ,
			Nom ,
			Prenom ,
			Email '
			-- TODO : rajouter la colonne structure
			--,Structure 'Structure'
	print 'SELECT = ' + @Select
	SET @From = ' FROM
		dbo.Users '
	print 'FROM = ' + @From	
		--Condition toujours vraie
		--nécessaire pour l'ajout des autres conditions 
	SET @Where = ' WHERE 1=1 '
	print 'WHERE 1 = ' +@Where
	IF  @LastName is not null
	BEGIN
		SET @Where = @Where + ' AND Nom = @LastName '
		print 'WHERE NOM = ' + @Where
		SET @ParamNom = 'SET @LastName = ' +  @LastName + ' '
		print 'NOM = ' + @ParamNom
	END
	IF @FirstName is not null
	BEGIN
		SET @Where = @Where + ' AND Prenom = @FirstName '
		print 'WHERE PRENOM = ' + @Where
		SET @ParamPrenom = 'SET @FirstName = ' +  @FirstName + ' '
		print 'PRENOM = ' + @ParamPrenom
	END
	--TODO : prendre en compte les 2 colonnes à rajouter dans la table
	--IF @Structure <> null
	--BEGIN
	--	SET @Where = @Where + ' AND Structure = @Structure '
	--  print 'WHERE STRUCTURE = ' + @Where
	--	SET @ParamStructure = 'SET @ParamStructure = ' + N'@Structure' + ' '
	--	print 'STRUCTURE = ' + @ParamStructure
	--END
	--IF @Academy <> null
	--BEGIN
	--	SET @Where = @Where + ' AND Academy = @Academy '
	--  print 'WHERE ACADEMY = ' + @Where
	--	SET @ParamAcademy = 'SET @ParamAcademy = ' + N'@Academy' + ' '
	--	print 'ACADEMY = ' + @ParamAcademy
	--END
 
	SET @Param = ' DECLARE @LastName nvarchar(50),
						  @FirstName nvarchar(50),
						  @Structure nvarchar(50),
						  @Academy nvarchar(50) '
	print 'PARAM = ' + @Param				  
	--' @LastName = ' + @LastName + ' ,@FirstName = ' + @FirstName + ' ,@Structure = ' + @Structure + ',@Academy = ' + @Academy
	SET @Param = @Param + @ParamNom + @ParamPrenom + @ParamStructure + @ParamAcademy 
	print 'PARAM FIN = ' + @Param
	SET @cmd = @Param +@Select + @From + @Where
	print 'CMD = ' + @cmd
	exec @cmd
END
GO
Mon problème concernant les clauses WHERE, par exemple

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
IF  @LastName is not null
	BEGIN
		SET @Where = @Where + ' AND Nom = @LastName '
		print 'WHERE NOM = ' + @Where
		SET @ParamNom = 'SET @LastName = ' +  @LastName + ' '
		print 'NOM = ' + @ParamNom
	END
@LastName est bien remplacé par la valeur du champ correspondant, comme Dupont par exemple. Le problème, c'est que je voudrais plutot avoir 'Dupont' comme valeur. Comment rajouter les quotes?

Merci d'avance de votre aide.