Échec de la conversion de la valeur varchar en type de données int.
Mon code sql ne marche pas
Code:
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:
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:
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