2014-06-12 51 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()