Sql server 在字符串列SQL中计算逻辑表达式

Sql server 在字符串列SQL中计算逻辑表达式,sql-server,tsql,sql-server-2005,Sql Server,Tsql,Sql Server 2005,我有一个表,其中包含列id(int)、逻辑表达式(varchar)和结果(bit)。逻辑表达式存储在varchar中,我需要对其求值并将结果放入result列。例如,该列可以包含: '1=1' '2<3 AND 1^1=1' '3>4 OR 4<2' 目前,我使用游标来导航行,并使用动态sql来计算表达式 "IF(" + @expression + ") SET @result = 1" 有没有更好、更有效的方法?理想情况下,我希望摆脱光标。有什么想法吗?使用程序集会更好

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

'1=1'
'2<3 AND 1^1=1'
'3>4 OR 4<2'
目前,我使用游标来导航行,并使用动态sql来计算表达式

"IF(" + @expression + ") SET @result = 1" 
有没有更好、更有效的方法?理想情况下,我希望摆脱光标。有什么想法吗?使用程序集会更好吗?

我会使用CLR

我在这里发布了一个非常类似的答案:

事实上,上述答案在未经修改的情况下适用于(以及任何其他简单表达式):

选择dbo.eval('1=1')

选择dbo.eval('3>4或4不久前,我用SQL编写了一个用户定义的函数,以给出计算中缀算术表达式(如1+2+3+4/(5-2))的十进制结果。代码是。您可能可以对其进行调整以适用于布尔表达式。它使用一个名为Sequence0_8000的整数表,您可以用任何方式填充该表。

没有有效的方法来完成此操作。理想情况下,您可以将结果集返回给应用程序,并让该应用程序计算所有表达式。如果这些表达式如果由用户应用,那么您需要小心潜在的注入攻击。让客户端代码或CLR evalutate表达式也可以解决此问题。语句是安全的,因此无需担心注入。这是后端系统的一部分。没有问题,尽管要重新迭代我的答案,您将与包含使用XOR运算符,SQLs表示法与.net非常不同,我怀疑您是否会找到支持它的eval。如果表达式包含插入符号(即使用EXEC()),您可能必须调整CLR以返回SQL–这似乎毫无意义,但至少通过将其包装在CLR中,您可以保留基于集合的选择等。我可以控制not运算符,因此我可以更改它,使其与eval一起工作。
"IF(" + @expression + ") SET @result = 1" 
SELECT dbo.eval('1=1' )
SELECT dbo.eval('3>4 OR 4<2' )