我的表格包含 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"
有更好,更有效的方法吗?我理想地想要摆脱光标。有任何想法吗?使用装配会更好地执行此操作吗?
答案 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的整数表,您可以以任何方式填充它。