我有一个小型的DSL,用户可以在这里为某些操作表达某些条件。现在我需要在sql server上解决这些条件。在Sql Server中执行树
条件中的节点是AND/OR/atom,其中AND/OR是二进制表达式,原子是标识符==
操作数,其中==
是唯一的操作符。
所以我在Sql Server中创建了下列表来存储树。
CREATE TABLE [dbo].[Condition]([Id] [hierarchyid], [Order] [int] NULL,
[NodeType] [nchar](10),[Identifier] [nvarchar](50) ,[Operand] [nvarchar](255) NULL)
是否有任何方式来行走这棵树,并在sql语句中评估它的节点?我可以在编译代码的C#中执行此操作,但是我在sql中思考它。我需要它在SQL中,因为数据的筛选必须发生在SQL中。
例如,如果条件是
(T=="T1" || T=="T2") && (R=="R1" || R =="R2") || T=="T3"
表看起来像
Id Order NodeType Identifier Operand Id.ToString()
------------------------------------------------------------------------------------
0x NULL OR NULL NULL /
0x58 1 AND NULL NULL /1/
0x5AC0 1 OR NULL NULL /1/1/
0x5AD6 1 Expr T T1 /1/1/1/
0x5ADA 2 Expr T T2 /1/1/2/
0x5B40 2 OR NULL NULL /1/2/
0x5B56 1 Expr R R1 /1/2/1/
0x5B5A 2 Expr R R2 /1/2/2/
0x68 2 Expr T T3 /2/
你能张贴例如“条件”和相应的表记录? –
@DourHighArch请看更新 –