select 来自 openxml sql 存储过程的相同子节点
select same child node from openxml sql stored procedure
我有一个 XML 字符串如下:
<XML>
<ProductDetail>
<Barcode>170604658</Barcode>
<PropertyDetail>
<PropertyKey>Size</PropertyKey>
<PropertyValue>XXL</PropertyValue>
<PropertyKey>ProdTaxType</PropertyKey>
<PropertyValue>5%</PropertyValue>
</PropertyDetail>
</ProductDetail>
</XML>
我正在通过 sp 中的以下小查询读取 XML 数据:
SELECT *
FROM OPENXML(@hDoc, 'XML/ProductDetail/PropertyDetail', 2) WITH
(
PropertyKey VARCHAR(200) ,
PropertyValue VARCHAR(200)
)XML
但是,对于上面我得到的一行数据如下:
PropertyKey PropertyValue
Size XXL
但是,根据 XML 定义,我想获取如下数据:
PropertyKey PropertyValue
Size XXL
ProdTaxType 5%
对于相同的智利节点名称,我只从 xml 字符串中获得一条记录。所以,请在上面的 sp 中提出建议。
因为你的XML没成型好,应该是这样的:
DECLARE @hdoc varchar(max) = '<XML>
<ProductDetail>
<Barcode>150604658</Barcode>
<PropertyDetail>
<PropertyKey>Size</PropertyKey>
<PropertyValue>XXL</PropertyValue>
</PropertyDetail>
<PropertyDetail>
<PropertyKey>ProdTaxType</PropertyKey>
<PropertyValue>5%</PropertyValue>
</PropertyDetail>
</ProductDetail>
</XML>'
在您的示例中,PropertyDetail
具有重复的属性。
也可以改写成这样:
DECLARE @hdoc varchar(max) = '<XML>
<ProductDetail Barcode="150604658">
<PropertyDetail PropertyKey="Size" PropertyValue="XXL" />
<PropertyDetail PropertyKey="ProdTaxType" PropertyValue="5%" />
</ProductDetail>
</XML>'
现在你不会想到写:
<PropertyDetail PropertyKey="Size" PropertyValue="XXL"
PropertyKey="ProdTaxType" PropertyValue="5%" />
但含义与您的 XML - and duplicate attributes are not allowed 相同。
我有一个 XML 字符串如下:
<XML>
<ProductDetail>
<Barcode>170604658</Barcode>
<PropertyDetail>
<PropertyKey>Size</PropertyKey>
<PropertyValue>XXL</PropertyValue>
<PropertyKey>ProdTaxType</PropertyKey>
<PropertyValue>5%</PropertyValue>
</PropertyDetail>
</ProductDetail>
</XML>
我正在通过 sp 中的以下小查询读取 XML 数据:
SELECT *
FROM OPENXML(@hDoc, 'XML/ProductDetail/PropertyDetail', 2) WITH
(
PropertyKey VARCHAR(200) ,
PropertyValue VARCHAR(200)
)XML
但是,对于上面我得到的一行数据如下:
PropertyKey PropertyValue
Size XXL
但是,根据 XML 定义,我想获取如下数据:
PropertyKey PropertyValue
Size XXL
ProdTaxType 5%
对于相同的智利节点名称,我只从 xml 字符串中获得一条记录。所以,请在上面的 sp 中提出建议。
因为你的XML没成型好,应该是这样的:
DECLARE @hdoc varchar(max) = '<XML>
<ProductDetail>
<Barcode>150604658</Barcode>
<PropertyDetail>
<PropertyKey>Size</PropertyKey>
<PropertyValue>XXL</PropertyValue>
</PropertyDetail>
<PropertyDetail>
<PropertyKey>ProdTaxType</PropertyKey>
<PropertyValue>5%</PropertyValue>
</PropertyDetail>
</ProductDetail>
</XML>'
在您的示例中,PropertyDetail
具有重复的属性。
也可以改写成这样:
DECLARE @hdoc varchar(max) = '<XML>
<ProductDetail Barcode="150604658">
<PropertyDetail PropertyKey="Size" PropertyValue="XXL" />
<PropertyDetail PropertyKey="ProdTaxType" PropertyValue="5%" />
</ProductDetail>
</XML>'
现在你不会想到写:
<PropertyDetail PropertyKey="Size" PropertyValue="XXL"
PropertyKey="ProdTaxType" PropertyValue="5%" />
但含义与您的 XML - and duplicate attributes are not allowed 相同。