2014-06-12 72 views
-2

鑑於下面的XML,正確的SQL XQuery將檢索SubscriberID爲空的SubscriberStatus是什麼?鑑於XML存儲在具有XML數據類型的列中。要選擇的XQuery相關節點

<ObjectEntry> <Key>Key1</Key> <DicValue> <ObjectEntry> <Key>SubscriberStatus</Key> <Value xsi:type="xsd:string">Active</Value> <DicValue /> </ObjectEntry> <ObjectEntry> <Key>SubscriberID</Key> <Value xsi:type="xsd:string" /> <DicValue /> </ObjectEntry> </DicValue> </ObjectEntry>

+0

沒有像SQL XQuery這樣的東西。簡而言之,還有支持XQuery的關係數據庫。在這種情況下,無論您是在關係數據庫還是其他位置執行XQuery,都沒有區別。 – dirkk

+0

-1未顯示解決您的問題的嘗試。 – DBedrenko

回答

0

感謝您的建議!不幸的是,他們沒有按照我的要求去做,但確實幫助我獲得了正確的語法。這是一個可行的解決方案。

select Request.query('//ObjectEntry/DicValue/ObjectEntry[Key = "SubscriberStatus"]/Value') as SubscriberStatus from RequestLog where Request.exist('//ObjectEntry/DicValue[ObjectEntry[Key = "SubscriberID" and Value = ""]]') = 1

1

試試這個:

如果$節點保存您的XML片斷,然後

$節點// ObjectEntry [DicValue/ObjectEntry [鍵EQ 「SubscriberStatus」]和DicValue/ObjectEntry [Key eq「SubscriberID」] [Value ne「」]]

將返回ObjectEntry父非空訂閱rIDs

1

這是一個簡單的XPath表達式,不需要真正的XQuery。 XPath是XQuery的一個子集。既然你想要的SubscriberStatus的<Value/>元素,你可以把它像下面這樣:

//ObjectEntry/DicValue[ObjectEntry[Key = "SubscriberID"]/Value = ""]/ObjectEntry[Key = "SubscriberStatus"]/Value 

這將提取其中確實有一個空SubscriberID所有ObjectEntries,然後導航到SubscriberStatus。如果你只是想要實際的字符串,你不能追加/string()