直接在"选择"中评估存储在Varchar列中的表达式声明

时间:2016-07-08 10:06:54

标签: sql sql-server sql-server-2012

我有一个名为float testdiv: 1.18729637828 long testdiv: 1.24389351342 float testsum: 0.48933646021 long testsum: 0.880058590455 float testmul: 0.477367560491 long testmul: 1.00981425402 float testsub: 0.48860840934 long testsub: 0.83331387588 的表,有三列 PriceDetails。我必须根据"price","discount formula" and "finalprice"列计算最终价格。

我的表格如下,

"Price" and "discount formula"

我想计算最终价格。公式为Price DiscountFormulae 100 100*(3/100) 200 200*(1.1/100)+200*(5/100) 300 300*(1/100)+300*(3/100)+300*(2/100) 400 400*(7/100)+400*(6.6/100)+400*(5.5/100)+400*(4/100)

例如

100 - (100 *(3/100))= 97

我的预期输出将是

"Price"-"DiscountFormulae"

我如何得到这个。请帮帮我。

2 个答案:

答案 0 :(得分:1)

不是很好的解决方案,但它表明,它有多难:

CREATE TABLE #temp (Price int, DiscountFormula Varchar(1000))
INSERT INTO #temp 
(#temp.Price, #temp.DiscountFormula)
VALUES
(100,'100.0*(3.0/100)'),
(200,'200.0*(1.1/100)+200*(5.0/100)'),
(300,'300.0*(1.0/100)+300*(3.0/100)+300*(2.0/100)'),
(400,'400.0*(7.0/100)+400*(6.6/100)+400*(5.5/100)+400*(4.0/100)')

DECLARE @price int

DECLARE cur CURSOR FOR SELECT t.Price FROM #temp AS t
OPEN cur
FETCH NEXT FROM cur INTO @price
WHILE (@@FETCH_STATUS = 0)
BEGIN

    DECLARE @sql nvarchar(MAX) = N'
    SELECT 
        t.Price,
        t.DiscountFormula,
        ' + (SELECT TOP 1 DiscountFormula FROM #Temp WHERE Price = @price) + N' as Value
    FROM #temp AS t
    WHERE Price = ' +CONVERT(nvarchar(max),@price)

    EXEC sp_executesql @sql

    FETCH NEXT FROM cur INTO @price
END

CLOSE cur

DROP TABLE #temp

顺便说一下,在公式中使用浮点值。

答案 1 :(得分:0)

您可以在存储过程中执行此操作,例如:

但是在用户定义的函数中不允许使用动态SQL,如Exitingexec

sp_executesql