我有一個小型的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請看更新 –