繁体   English   中英

在编写SQL XQuery时需要帮助

[英]Need help in writing sql xquery

我需要使用xquery从sql中的xml中选择特定值。 下面给出的是xml

DECLARE @v_productss_xml XML

set @v_productss_xml = 

'<Products EventTemplateId="1">
  <Product ProductId="BD0A7272-5D6D-47DA-9781-1BE4ACAC2D34" ProductName="Income Tax5">
    <Field FieldId="1" Fieldname="f1" />
    <Field FieldId="" Fieldname="f5" />
    <Field FieldId="" Fieldname="f6" />
  </Product>
  <Product ProductId="2EEB192E-1E95-4E6F-8A05-248DFC3A37EE" ProductName="Income Tax6">
    <Field FieldId="4" Fieldname="e1" />
    <Field FieldId="" Fieldname="e4" />
  </Product>
</Products>'

当FieldId =“”时,我想要行的ProductId,Fieldname。 对于上面的xml将是

BD0A7272-5D6D-47DA-9781-1BE4ACAC2D34, f5
BD0A7272-5D6D-47DA-9781-1BE4ACAC2D34, f6
2EEB192E-1E95-4E6F-8A05-248DFC3A37EE, e4

我可以比较fieldid属性,但可以选择产品ID。 感谢帮助。

我相信您是在此之后:

SELECT
    Nodes.node.value('@ProductId', 'varchar(50)') AS ProductId,
    Nodes.node.value('(Field[@FieldId=""]/@Fieldname)[1]', 'varchar(50)') AS Field
FROM
    @v_productss_xml.nodes('//Product') AS Nodes(node);

基本上,在xml文档中找到//Product节点,然后对每一行评估@ProductId属性,然后在具有空FieldId属性的Field上评估@Fieldname属性。

Re:更新要求/新的Xml

您给出的查询仅返回第一个子记录,我需要所有具有空值的子记录。 谢谢您的帮助

如果有多个孩子,那么我将主题更改为Field ,立即对empty属性进行过滤,然后导航回父项以获得ProductId 像这样:

SELECT
    Nodes.node.value('parent::Product/@ProductId', 'varchar(50)') AS ProductId,
    Nodes.node.value('@Fieldname', 'varchar(50)') AS attrib
FROM
    @v_productss_xml.nodes('//Product/Field[@FieldId=""]') AS Nodes(node);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM