【问题标题】:SQL Evaluate formula stored in databaseSQL评估存储在数据库中的公式
【发布时间】:2016-11-14 19:22:12
【问题描述】:

是否可以评估存储在列中的字符串公式/表达式? (SQL Server 2014)。

例子:

TABLE:
ID | Formula
1  | IIF(2<3,'A','B')
2  | IIF(3<4,'C','D')
3  | IIF(5<1,'E','F')

查询:

SELECT ID, Eval(Formula)

输出:

1 | A
2 | C
3 | F

【问题讨论】:

  • 没有动态 SQL 是不可能的,因为公式是特定于行的,所以也必须为每一行动态执行。如果公式是特定于列的(计算列),那么它会更容易一些,但仍然不是理想的或建议的做法
  • 这是一个坏主意......\

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


【解决方案1】:

使用动态 SQL,但真的不推荐。以防万一你真的不得不...

Declare @YourTable table (ID int,Formula varchar(100))
Insert Into @YourTable values
(1,'IIF(2<3,''A'',''B'')'),
(2,'IIF(3<4,''C'',''D'')'),
(3,'IIF(5<1,''E'',''F'')')

Declare @SQL varchar(max) = '>>>'

Select @SQL = Replace(@SQL + concat(' Union All Select ID=',ID,',Value=',Formula),'>>> Union All','')
 From  @YourTable

Exec (@SQL)

返回

ID  Value
1   A
2   C
3   F

【讨论】:

  • 谢谢约翰。我意识到这可能不是最好的方法,我对正在构建的系统有一些非常复杂的要求。只是探索可能性。再次感谢您的反馈!
  • @NateTheGreat 明白了。我过去做过这样的事情,我唯一担心的是无效的 SQL。我也想在 SQL 中看到 EVAL() 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多