anspauldou
Messages postés42Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention30 juin 2016
-
12 août 2010 à 14:08
anspauldou
Messages postés42Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention30 juin 2016
-
25 août 2010 à 20:45
Bonjour
J'ai deux tables dont l'une est Table_Formule et l'autre Table_Donnee. La table Table_Formule contient les informations suivantes :
insert into Table_Formule (NumLigne, Col_Formule)
Values (1, '{1001}*{1003}/{2004}')
insert into Table_Formule (NumLigne, Col_Formule)
Values (2, '({2005}+{1004})/({2004}*{1003}') bref j'ai plusieurs formules différentes par ligne.
Dans la table Table_Donnee j'ai les informations suivantes :
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('1001', 2500)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('1003', 40)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('2004', 300)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('2005', 360)
insert into Table_Donnee (CodeRef, ValeurRef)
Values ('1004', 10)
Je voudrai un script qui me permettra d'avoir au final :
2500*40/300 selon la formule de la première ligne et
(360+10)/(300*40) selon la deuxième ligne. Ma table Table_Formule doit pouvoir contenir autant de combinaison possible de formule. La colonne ValeurRef contient du numeric.
cs_Tolliap
Messages postés60Date d'inscriptionlundi 4 décembre 2006StatutMembreDernière intervention11 janvier 2013 25 août 2010 à 01:00
Bonjour,
Je ne sais pas ou tu es ai, mais voici une solution
ceci est une procédure qui reprend tes tables et colonnes que tu as renseigné sur ton poste.
Tu appel la procédure avec en paramètre le numéro de la ligne de la formule dont tu veut le résultat.
Create procedure ResultatFormule
@NumLigne int
as
declare @formule varchar(400)
set @formule = (select Table_Formule.Col_Formule from Table_Formule where NumLigne=@NumLigne)
DECLARE tnames_cursor CURSOR
FOR
select CodeRef, ValeurRef from Table_Donnee where @formule like '%{'+CodeRef+'}%'
OPEN tnames_cursor
DECLARE @CodeRef sysname
DECLARE @ValeurRef sysname
FETCH NEXT FROM tnames_cursor INTO @CodeRef, @ValeurRef
WHILE (@@FETCH_STATUS <> -1)
BEGIN
-------------------
set @formule = replace(@formule,'{'+@CodeRef+'}',@ValeurRef)
-------------------
FETCH NEXT FROM tnames_cursor INTO @CodeRef, @ValeurRef
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor
exec ('select '''+@formule+''' as Formule, '+@formule+' as Resultat')
anspauldou
Messages postés42Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention30 juin 2016 25 août 2010 à 20:45
Bonjour
J'ai testé ton script et certains points ne marchent pas et j'ai apporté mes modifications dont voici :
- Pour le
select CodeRef, ValeurRef from Table_Donnee where @formule like '%{'+CodeRef+'}%' j'ai opté pour select CodeRef, ValeurRef from Table_Donnee qui marche bien
-Pour le set @formule = replace(@formule,'{'+@CodeRef+'}',@ValeurRef)
j'ai opté pour le
Set @formule = replace(@formule,(Select '{'+ ltrim(rtrim(@@CodeRef)) + '}') ,@Valeur) car il ne voyait par '}'