SQL 服务器 - 如何根据动态公式执行计算
SQL Server - How to perform a calculation based on a dynamic formula
我有一个情况需要根据列中的特定条目执行动态计算。
table 看起来像:
DECLARE Temp TABLE (
Id INT,
Name NVARCHAR(255),
Const1 DECIMAL(18,10),
Const2 DECIMAL(18,10),
Const3 DECIMAL(18,10),
Const4 DECIMAL(18,10)
);
我想添加一个名为 "Calculation" 的字段。用户必须在该字段中指定如何应用常量(即 "Const1 * Const2 + (Const3 - Const4)")。
我有一个公式硬编码的函数,但我希望能够将 table 列动态映射到 "Calculation" 字段。这可能吗?如果我收到 table 条目,例如:
ID| Name | Const1 | Const2 | Const3 | Const4 | Calculation
1 | Calculation1 | 5 | 3 | 2 | 9 | Const1 * Const2 + (Const3 - Const4)
那么在我的函数中,我可以动态地进行计算并 return 将其作为输出吗?我是否以正确的方式处理这个问题?
提前致谢!
您需要将动态 SQL 与 sp_executesql
或 EXEC
结合使用。我不记得这些是否可以在 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)
我有一个情况需要根据列中的特定条目执行动态计算。
table 看起来像:
DECLARE Temp TABLE (
Id INT,
Name NVARCHAR(255),
Const1 DECIMAL(18,10),
Const2 DECIMAL(18,10),
Const3 DECIMAL(18,10),
Const4 DECIMAL(18,10)
);
我想添加一个名为 "Calculation" 的字段。用户必须在该字段中指定如何应用常量(即 "Const1 * Const2 + (Const3 - Const4)")。
我有一个公式硬编码的函数,但我希望能够将 table 列动态映射到 "Calculation" 字段。这可能吗?如果我收到 table 条目,例如:
ID| Name | Const1 | Const2 | Const3 | Const4 | Calculation
1 | Calculation1 | 5 | 3 | 2 | 9 | Const1 * Const2 + (Const3 - Const4)
那么在我的函数中,我可以动态地进行计算并 return 将其作为输出吗?我是否以正确的方式处理这个问题?
提前致谢!
您需要将动态 SQL 与 sp_executesql
或 EXEC
结合使用。我不记得这些是否可以在 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)