3

我有一个包含列id (int)、逻辑表达式(varchar) 和结果(bit) 的表。逻辑表达式存储在一个 varchar 中,我需要对其进行评估并将结果放入结果列。例如,该列可能包含:

'1=1'
'2<3 AND 1^1=1'
'3>4 OR 4<2'

结果列应包含

1
0
0

目前我正在使用游标来导航行并使用动态 sql 来评估表达式。

"IF(" + @expression + ") SET @result = 1" 

有没有更好、更有效的方法来做到这一点?理想情况下,我想摆脱光标。有任何想法吗?使用程序集会更好地执行此操作吗?

4

2 回答 2

2

我会选择CLR。

我在这里发布了一个非常相似的答案:Convert string with expression to decimal

事实上,上面的答案对于(和任何其他简单的表达式)未经修改就可以正常工作:

SELECT dbo.eval('1=1' )
SELECT dbo.eval('3>4 OR 4<2' )

但是,使用^(caret) 运算符的操作会失败 - 您需要调整 CLR 以处理按位 XOR。

于 2012-04-26T16:35:00.337 回答
1

前段时间,我在 SQL 中编写了一个用户定义的函数来给出计算中缀算术表达式的十进制结果,例如 1+2+3+4/(5-2)。代码在这里。您可能可以将其调整为适用于您的布尔表达式。它使用了一个名为 Sequence0_8000 的整数表,您可以按照您想要的任何方式填充该表。

于 2012-04-28T05:22:47.110 回答