我在查詢使用OpenXML檢索XML中的主題元素之間的帽元素我不想在支持元素之間的上限。該查詢很適合檢索一個值,但在有多個元素節點時會失敗。SQL使用OpenXML檢索多個元素
<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元素值。
謝謝你的時間。
'從OPENXML'與相應的SP準備和刪除文檔已過時,不應再使用(極少有例外)。而是使用適當的[XML數據類型提供的方法](https://msdn.microsoft.com/en-us/library/ms190798.aspx)。 – Shnugo