Sql server 2005 如何解析布尔逻辑字符串?

Sql server 2005 如何解析布尔逻辑字符串?,sql-server-2005,parsing,Sql Server 2005,Parsing,这听起来有点疯狂,但有没有人有技术可以让我在SQLServer2005中解析布尔逻辑字符串而不用付出非凡/荒谬的努力 以下是一个例子: (SOMEVAR=4 OR SOMEVAR=5) AND (NOT OTHERVAR=Y) 我觉得如果在SQL中可以实现递归的话,它会有很大帮助,但我真的不知道该怎么做。如果没有,也许有一种方法可以附加一个外部系统来为我执行递归。别担心,我不会抱太大希望。你最好的办法就是使用。这将使查找或开发解决此问题的代码变得更容易。如果您从某个进程(网站或其他什么)接收逻

这听起来有点疯狂,但有没有人有技术可以让我在SQLServer2005中解析布尔逻辑字符串而不用付出非凡/荒谬的努力

以下是一个例子:

(SOMEVAR=4 OR SOMEVAR=5) AND (NOT OTHERVAR=Y)

我觉得如果在SQL中可以实现递归的话,它会有很大帮助,但我真的不知道该怎么做。如果没有,也许有一种方法可以附加一个外部系统来为我执行递归。别担心,我不会抱太大希望。

你最好的办法就是使用。这将使查找或开发解决此问题的代码变得更容易。

如果您从某个进程(网站或其他什么)接收逻辑字符串作为输入,则可以使用它们来构建和执行动态sql字符串。使用这种方法时,您必须非常小心注入攻击。

根据您的评论判断,您需要知道“最终确定最外部的语句最终是真是假”,然后您不需要解析表达式,您需要对其进行求值。您可以尝试使用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;
...
虽然这是您感兴趣的(计算表达式),但它存在一些主要问题:

  • 它对SQL注入开放,@表达式必须是可信输入
  • @表达式只能引用在sp_executesql期间传入的局部变量
  • 您需要将所有局部变量传递给sp_executesql,或者至少传递可以出现在@expression中的所有局部变量
  • 很难维护,因为任何新的局部变量都必须传递给sp_executesql(声明为参数,实际添加为参数)
  • @expression中的任何错误都将作为执行错误传播(您可以使用BEGIN TRY/BEGIN CATCH来防止这种情况发生)

我不知道你的具体情况,但是试着考虑一下评价是否必要。我并不是说完全不是这样,因为我自己也必须处理类似的问题(来自需要计算的配置表的表达式)。

多了解一些背景可能会有所帮助。您希望从解析中获得什么?表达式树?我只需要最终找出最外层的语句是真是假。在解析时,我可能正在对我猜的变量进行检查,所以你看不到要解析它,你需要对它求值。