1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| DECLARE @FORMULA VARCHAR(500);
DECLARE @CHARSPLITER CHAR(1) = ' ';
DECLARE @ELEMENT VARCHAR(MAX)='';
DECLARE @EXPR NVARCHAR(MAX)='';
SELECT @FORMULA=formule+@CHARSPLITER FROM tab WHERE Formule IS NOT NULL;
WHILE CHARINDEX( @CHARSPLITER, @FORMULA )>0
BEGIN
SET @ELEMENT=SUBSTRING( @FORMULA, 0, CHARINDEX( @CHARSPLITER, @FORMULA ) );
SELECT @EXPR+=CASE
WHEN LEFT( @ELEMENT, 1 )='@'
THEN (SELECT CAST( montant AS VARCHAR(MAX)) FROM dbo.tab WHERE Code=RIGHT( @ELEMENT, LEN( @ELEMENT )-1 ) )
WHEN @ELEMENT IN ('+', '-')
THEN @ELEMENT
ELSE NULL
END;
SET @FORMULA=SUBSTRING(@FORMULA, CHARINDEX(@CHARSPLITER, @FORMULA )+1, LEN(@FORMULA) );
END;
SET @Expr='SELECT '+@Expr +' AS Résultat' ;
SELECT * FROM tab;
SELECT '{ ' + @expr +' }' as Ordre_SQL ;
EXECUTE sp_executesql @stmt=@Expr; |
Partager