需要帮助编写 sql xquery

Need help in writing sql xquery

我需要使用 xquery select 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 属性,但能够 select 产品 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 属性,评估 @Fieldname 属性。

回复:更新要求/新要求Xml

The query given by you is returning only the first child record, I need all the child records with empty value. Thank you for your help

如果有多个child,那么我会把主题换成Field,马上对empty属性进行过滤,然后导航回parent 获取 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);