需要帮助编写 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);
我需要使用 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);