2017-09-11 8 views
-1

Ich habe eine Menge Forschung durchgeführt und kann nicht scheinen, die SQL zusammenzufassen, um die erforderlichen Daten aus einem XML-Feld zu extrahieren.SQL - XML ​​aus mehreren Knoten extrahieren

<vItem> 
<jobScript> 
    <node guid="7606bd90-98df-4572-accd-5b41ec5605dc"> 
     <subNodes> 
      <node guid="17f8e275-d4f6-47c0-a5e4-80da658f4097"> 
       <execute taskVersionGuid="5fc17d5c-7264-461f-ae38-753d703f3c99" /> 
      </node> 
      <node guid="5fe2233c-9e3a-44be-aa20-aea2c8dcbd4a"> 
       <execute taskVersionGuid="f55dc069-46ff-427e-920f-5f1c3fc3ad09" /> 
      </node> 
      <node guid="ecd6a7b5-a3be-483c-acf8-64ba1c289088"> 
       <execute taskVersionGuid="5220d97c-6e8f-400a-b814-aa7d84942c20" /> 
      </node> 
     </subNodes> 
    </node> 
</jobScript> 

Ich versuche, die taskVersionGuid von jedem Knoten zu extrahieren. In dem Szenario könnte es irgendwo zwischen 1 und 10 taskVersionGuids geben, aber das Beispiel, das ich oben habe, hat 3.

Jede Hilfe mit diesem würde geschätzt werden.

Dank

bearbeiten

ich die unten auch versucht:

declare @XML xml 

set @XML = 
' 

<vItem> 
    <jobScript> 
     <node guid="7606bd90-98df-4572-accd-5b41ec5605dc"> 
      <subNodes> 
       <node guid="17f8e275-d4f6-47c0-a5e4-80da658f4097"> 
        <execute taskVersionGuid="5fc17d5c-7264-461f-ae38-   
753d703f3c99" /> 
       </node> 
       <node guid="5fe2233c-9e3a-44be-aa20-aea2c8dcbd4a"> 
        <execute taskVersionGuid="f55dc069-46ff-427e-920f-  
5f1c3fc3ad09" /> 
       </node> 
       <node guid="ecd6a7b5-a3be-483c-acf8-64ba1c289088"> 
        <execute taskVersionGuid="5220d97c-6e8f-400a-b814- 
aa7d84942c20" /> 
       </node> 
      </subNodes> 
     </node> 
    </jobScript> 
</vItem> 
' 

select T.N.query('.') 
from @XML.nodes('/vItem/jobScript/node/subNodes/node/execute') as T(N) 

Dies führt jedoch in der folgenden:

<execute taskVersionGuid="5fc17d5c-7264-461f-ae38-753d703f3c99" /> 
<execute taskVersionGuid="f55dc069-46ff-427e-920f-5f1c3fc3ad09" /> 
<execute taskVersionGuid="5220d97c-6e8f-400a-b814-aa7d84942c20" /> 

Während ich versuche, um den Wert von taskVersionGuid zu erhalten.

Nochmals vielen Dank.

+0

Ich habe versucht, den folgenden Artikel anwenden, aber kann nicht scheinen, damit es funktioniert. https://stackoverflow.com/questions/8718611/selecting-individual-xml-node-using-sql – Spaceman

+0

XML-Unterstützung ist ** sehr herstellerspezifisch ** - also fügen Sie bitte ein Tag hinzu, um anzugeben, ob Sie verwenden mysql, postgresql, sql-server, oracle oder db2 - oder etwas ganz anderes. –

+0

Hallo @marc_s, Ich habe die Tags aktualisiert. Danke für die Information. – Spaceman

Antwort

0

Was Sie tun müssen, ist Ihre XML in eine Tabelle zu verwandeln, so dass Sie es abfragen können. Im Folgenden finden Sie ein Beispiel für die Abfrage, die Sie benötigen, um die Werte von den Knoten abzurufen.

DECLARE @xml AS XML = '<jobScript> 
<node guid="7606bd90-98df-4572-accd-5b41ec5605dc"> 
    <subNodes> 
     <node guid="17f8e275-d4f6-47c0-a5e4-80da658f4097"> 
      <execute taskVersionGuid="5fc17d5c-7264-461f-ae38-753d703f3c99" /> 
     </node> 
     <node guid="5fe2233c-9e3a-44be-aa20-aea2c8dcbd4a"> 
      <execute taskVersionGuid="f55dc069-46ff-427e-920f-5f1c3fc3ad09" /> 
     </node> 
     <node guid="ecd6a7b5-a3be-483c-acf8-64ba1c289088"> 
      <execute taskVersionGuid="5220d97c-6e8f-400a-b814-aa7d84942c20" /> 
     </node> 
    </subNodes> 
</node> 
</jobScript>' 

SELECT a.value('.', 'varchar(max)') 
FROM @xml.nodes('/jobScript/node/subNodes/node/execute/@taskVersionGuid') a(a) 
+0

Hallo @ttallierchio, Schätzen Sie die Antwort, ich fand eine Lösung und beantwortete meine Frage, bevor Sie Ihren Beitrag zu sehen. Schätze deine Hilfe. Danke – Spaceman

2

Antwort wie folgt:

select T.N.value('@taskVersionGuid[1]', 'uniqueidentifier') 
from @XML.nodes('/vItem/jobScript/node/subNodes/node/execute') as T(N) 
Verwandte Themen