【发布时间】:2017-12-03 04:23:44
【问题描述】:
我正在使用 OpenXML 查询以检索 XML 中主题元素之间的上限元素我不希望支持元素之间的上限。该查询可以很好地检索一个值,但在有多个元素节点时会失败。
<First>
<Test id="83847">
<subject>
<cap>15</cap>
<cap>25</cap>
<cap>100</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
<Test id="83848">
<subject>
<cap>150</cap>
<cap>2</cap>
<cap>10</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
</First>
CREATE Table #XmlTemp(XmlField Xml);
Set Nocount On;
Insert Into #XmlTemp(XmlField)
Select '<First>
<Test id="83847">
<subject>
<cap>15</cap>
<cap>25</cap>
<cap>100</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
<Test id="83848">
<subject>
<cap>150</cap>
<cap>2</cap>
<cap>10</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
</First>'As XmlField;
Declare @xmlData Xml;
Select @xmlData = XmlField From #XmlTemp;
Declare @document int;
Exec sp_xml_preparedocument @document Output, @xmlData, NULL;
SELECT ID,Cap FROM(
SELECT ID,Cap FROM OpenXml(@document,'./First/Test', 0) With (ID varchar(max)'./@id', Cap Varchar(max) './subject/cap')) alias
drop table #xmltemp
将查询更改为使用 .nodes 方法会相当耗时,因为涉及到测试,所以如果可能的话,我希望它保持为 OpenXML。 我只想检索 ID,然后检索多个 cap 元素值。
感谢您的宝贵时间。
【问题讨论】:
-
FROM OPENXML与相应的 SP 准备和删除文档已过时,不应再使用(存在罕见的例外情况)。而是使用适当的methods the XML data type provides。
标签: sql-server xml xpath xquery openxml