这听起来很疯狂,但是有没有人能够让我在SQL Server 2005中解析布尔逻辑字符串而不需要非常/荒谬的努力?
以下是一个例子:
(SOMEVAR=4 OR SOMEVAR=5) AND (NOT OTHERVAR=Y)
如果在SQL中可能的话,我觉得递归会有很大的帮助,但我不确定如何去做那种事情。如果没有,也许有一种方法可以附加一个外部系统来为我做递归。别担心,我没有抱怨。
答案 0 :(得分:1)
最好的办法是使用CLR integration。这将使查找或开发能够解决此问题的代码变得更加容易。
答案 1 :(得分:0)
如果从某个进程(网站或其他)接收逻辑字符串作为输入,则可以使用它们来构建和执行动态sql字符串。你必须非常小心这种接近的注射攻击。
答案 2 :(得分:0)
从你的评论判断你需要知道'最终发现最外层的陈述是真还是假'然后你不需要解析表达式,你需要对它进行评估。您可以尝试使用sp_executesql:
...
declare @sql nvarchar(max);
declare @result bit;
-- consider @expression has the expression to be evaluated
-- eg. @expression = '(@SOMEVAR=4 OR @SOMEVAR=5) AND (NOT @OTHERVAR=''Y'')';
set @sql = N'set @result=case when ' + @expression + N' then 1 else 0 end;';
exec sp_executesql @sql, N'@SOMEVAR int, @OTHERVAR vachar(max), @result bit output', @SOMEVAR, @OTHERVAR, @result output;
SELECT @result;
...
虽然这可以满足您的需求(评估表达式),但它存在重大问题:
我不知道您的具体情况,但请考虑是否有必要进行评估。我不是说完全没有,因为我自己必须处理类似的问题(来自需要评估的配置表的表达式)。