评估字符串列SQL中的逻辑表达式

时间:2012-04-26 16:12:23

标签: sql-server tsql sql-server-2005

我的表格包含 id (int),逻辑表达式(varchar)和结果(位)列。逻辑表达式存储在我需要评估的varchar中,并将结果放入结果列。例如,该列可以包含:

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

结果列应包含

1
0
0

目前我使用游标导航行并使用动态sql来计算表达式。

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

有更好,更有效的方法吗?我理想地想要摆脱光标。有任何想法吗?使用装配会更好地执行此操作吗?

2 个答案:

答案 0 :(得分:2)

我会选择CLR。

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

事实上,上面的答案可以很好地修改(和任何其他简单的表达式):

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

但是,对于使用^(插入符号)运算符的运算符,它会失败 - 您需要调整CLR来处理按位异或。

答案 1 :(得分:1)

前段时间,我在SQL中编写了一个用户定义的函数,给出了评估中缀算术表达式的十进制结果,如1 + 2 + 3 + 4 /(5-2)。代码是here。您可以调整它以适应您的布尔表达式。它使用一个名为Sequence0_8000的整数表,您可以以任何方式填充它。