SQL Server - 如何基于动态公式执行计算

时间:2016-01-07 15:45:33

标签: sql sql-server user-defined-functions

我有一个案例需要根据列中的特定条目执行动态计算。

该表格如下:

DECLARE Temp TABLE (
        Id INT, 
        Name NVARCHAR(255),
        Const1 DECIMAL(18,10),
        Const2 DECIMAL(18,10),
        Const3 DECIMAL(18,10),
        Const4 DECIMAL(18,10)
    );

我想添加一个名为“计算”的字段。用户必须在该字段中指定如何应用常量(即“Const1 * Const2 +(Const3-Const4)”)。

我有一个具有硬编码公式的函数但我希望能够将表列动态映射到“计算”字段。这可能吗?如果我得到的表格如下:

ID| Name         | Const1 | Const2 | Const3 | Const4 | Calculation
1 | Calculation1 |      5 |      3 |      2 |      9 | Const1 * Const2 + (Const3 - Const4)

然后在我的函数中,我可以动态地进行计算并将其作为输出返回吗?我是否以正确的方式处理这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:5)

您需要使用sp_executesqlEXEC的动态SQL。我不记得那些是否可以在UDF中使用,并且有一些问题需要注意,例如SQL注入和可能的性能问题。我没有时间测试它是否在UDT中有效,但你想要的是:

DECLARE @sql VARCHAR(MAX)

SELECT @sql = 'SELECT ' + REPLACE(REPLACE(Calculation, 'Const1', Const1), 'Const2', Const2)... + ' AS result'
FROM My_Table
WHERE ID = 1

EXEC(@sql)