Mon code sql ne marche pas

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
 
ALTER PROCEDURE [dbo].[ComparaisonDePeriode]
@ValeurAffichage nvarchar(200),
@ValeurCompare nvarchar(200),
@Chaine nvarchar(225),
@ChaineFiltre nvarchar(225),
@NomElt nvarchar(25),
@NomValeur nvarchar(25),
@NombreCompare nvarchar(4),
@OperateurComparaison nvarchar(5),
@ChaineHaving nvarchar(25),
@Titre nvarchar(200),
 
@PeriodeFin int,
@NombrePeriodeCompare int,
@Annee int,
@PeriodeCompare nvarchar(15)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @SqlCommand nvarchar(3000)
declare @SqlCommandMoisArticleQuantite nvarchar(3000)
declare @SqlCommandMoisArticleBeneficeVente nvarchar(3000)
declare @SqlCommandMoisArticleMontantDesQuantite nvarchar(3000)
 
set @SqlCommandMoisArticleQuantite='SELECT nom+'' (''+CodeArticle+'')'' as Elt,datename(MONTH,dateoperation)+'' ''+cast(case when 
MONTH(dateoperation)>'+@PeriodeFin+' then '+@Annee-1+' else '+@Annee+' end as nvarchar) as Periode,sum(V) as V,'''+@ChaineFiltre+''' as 
ChaineFiltre,'''+@Titre+''' as Titre,case when MONTH(dateoperation)>'+@PeriodeFin+' then MONTH(dateoperation)-12 else MONTH(dateoperation) 
end as NbP from bilan_quantite_general inner join p_article on bilan_quantite_general.codearticle=p_article.code where (clfo=''client'') and 
((month(dateoperation) between  '+@Periodefin-@NombrePeriodeCompare+13+' and 12) and (year(dateoperation)='+@annee-1+')) or 
((month(dateoperation) between 1 and '+@Periodefin+') and (year(dateoperation)='+@annee+')) group by nom+'' 
(''+CodeArticle+'')'',datename(MONTH,dateoperation)+'' ''+cast(case when MONTH(dateoperation)>'+@PeriodeFin+' then '+@Annee-1+' else '
+@Annee+' end as nvarchar),case when MONTH(dateoperation)>'+@PeriodeFin+' then MONTH(dateoperation)-12 else MONTH(dateoperation) 
end'
Voilà le code d'exécution

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
USE [LEHI]
GO
 
DECLARE	@return_value int
 
EXEC	@return_value = [dbo].[ComparaisonDePeriode]
		@ValeurAffichage = N'ARTICLES',
		@ValeurCompare = N'QUANTITE',
		@Chaine = N'',
		@ChaineFiltre = N'',
		@NomElt = N'',
		@NomValeur = N'',
		@NombreCompare = N'5',
		@OperateurComparaison = N'PLUS',
		@ChaineHaving = N'',
		@Titre = N'',
		@PeriodeFin = 2,
		@NombrePeriodeCompare = 3,
		@Annee = 2015,
		@PeriodeCompare = N'MOIS'
 
SELECT	'Return Value' = @return_value
 
GO
et le message d'erreur suivant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Msg*245, Niveau*16, État*1, Procédure*ComparaisonDePeriode, Ligne*35
Échec de la conversion de la valeur varchar 'nom+' ('+CodeArticle+')' as Elt,datename(MONTH,dateoperation)+' '+cast(case when MONTH(dateoperation)>' 
en type de données int.
Et pourtant, quand je code en dur, ça marche sans problème. Tous mes efforts sont vains.
j'ai grand besoin d'un coup de pouce