2016-11-03 2 views
2

Ich habe eine Tabelle, die zwei Spalten und ID und XML-Daten enthält. Ich möchte das XML für jede ID vernichten. Ich ziehe einen einzelnen Wert innerhalb der XML aus und alles XML ist gleich strukturiert. Ich bin mir nicht sicher, wie ich die Tabelle durchlaufen und eine XML-Abfrage auf jede Zeile anwenden soll.Shred XML für jede Zeile in SQL Tabelle

Die Abfrage, die ich anwenden müssen, ist wie folgt:

Select top 1 
Element1 = XV.value('(.)[1]','nvarchar(32)') 
from @xml.nodes('Parameters/Parameter/Value') as x(XV) 

So die Endergebnisse zwei Spalten haben würde, ID und geschreddert Wert von XML.

+0

, wenn Sie dies immer wieder zugreifen möchten, können Sie beschleunigen Sie können eine berechnete Spalte zu Ihrer Tabelle hinzufügen, die den Wert vorzerkleinert. https://msdn.microsoft.com/en-us/library/bb500236(v=sql.120).aspx – montewhizdoh

Antwort

2

Ohne Wissen über Ihre tatsächlichen XML und wie Sie wollen, es zu zerreißen einige Werte, um es in Vollständigkeit zu beantworten, aber dieser shoudl Punkt, den Sie in die richtige Richtung unmöglich ist:

Gibt die ID und die XML wie

SELECT ID 
     ,TheXmlColumn 
FROM YourTable 

Dieses die ID und einen Wert aus Ihrem XML

SELECT ID 
     ,TheXmlColumn.value('Some XPaht','SomeType') AS SomeValueFromXML 
FROM YourTable 

und wenn ther zurück e sind Reihen mehr eingebettet es so etwas wie dieses

SELECT ID 
     ,nd.value('Some XPaht','SomeType') AS SomeValueFromXMLRow 
FROM YourTable 
OUTER APPLY TheXmlColumn.nodes('SomeXPath') AS A(nd) 

Meine Magie Glaskolben mir erzählt würde, dass Sie so etwas wie dieses benötigen:

SELECT ID 
     ,TheXmlColumn.value('(Parameters/Parameter/Value)[1]','nvarchar(max)') AS SomeValueFromXML 
FROM YourTable 
+0

Der letzte Vorschlag war derjenige, der funktioniert. 'SELECT ID , TheXmlColumn.value ('(Parameter/Parameter/Wert) [1]', 'nvarchar (max)') AS SomeValueFromXML FROM YourTable' – MPJ567

Verwandte Themen