使用SQL Server(CLR)进行逻辑/布尔表达式求值

时间:2014-10-01 08:46:03

标签: c# sql clr evaluate

我需要对分阶段数据进行检查(在各种表中)。必须根据评估为布尔值的(业务)规则检查数据字段值。用户可以使用逻辑表达式定义这些规则:

A> B,A>和A< C,A> B OR A< C,A = B OR A = C等(其中A,B,C表示字段值)。

规则将作为字符串与规则适用的列一起放在表中。我已经研究了如何在规则中获取字段值以及如何将规则应用于分阶段数据。 (我还使用RegEx来测试-custom-数据类型。我将舞台变成类似EAV的表,并加入列名的规则。)

我不是.Net程序员,所以构建解析器和评估程序对我来说是不可能的。 我正在寻找一个(保存)解决方案来评估逻辑/布尔表达式运行时。我计划将评估程序放在CLR中并将其用作函数(就像我使用RegEx一样)。我看过NCALC(不安全),逃离(过时)等,但我无法找到评估这些表达式的最新解决方案。 (将字符串解析为像IFF,IF,CASE这样的SQL表达式,似乎有点偏僻。)

任何建议。我可能在这里遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

免责声明:我是该项目的所有者Eval SQL.NET

如果语法与C#兼容,则Eval SQL.NET允许直接在T-SQL中使用参数来评估布尔表达式,

实施例

-- SELECT 1 (true)
SELECT  SQLNET::New('A > B && B < C')
.Val('A', 3)
.Val('B', 1)
.Val('C', 2).EvalBit()

-- SELECT 0 (false)
SELECT  SQLNET::New('A > B && B < C')
.Val('A', 3)
.Val('B', 2)
.Val('C', 1).EvalBit()