Arbeiten mit dem SQL Server XML data type
Ich habe eine Tabelle, die eine XML-Feld.
Die typische XML enthält, ist;
<things>
<Fruit>
<imageId>39</imageId>
<title>Apple</title>
</Fruit>
<Fruit>
<imageId>55</imageId>
<title>Pear</title>
</Fruit>
<Fruit>
<imageId>76</imageId>
<title>Grape</title>
</Fruit>
</things>
In meiner Tabelle habe ich um die 50 Zeilen, ich bin nur besorgt, mit zwei Feldern, omId (int primary key) und omText (meine xml-Daten).
, Was ich versuche zu erreichen ist eine Art zu sagen, auf alle xml-Daten in die gesamte Tabelle... gebt mir alle xmlElements wo der Titel ist X. Oder geben Sie mir eine Anzahl der Elemente, die Verwendung einer imageId der 55.
Ich bin mit dem XML-Datentyp WERT-und ABFRAGE-Funktionen, um die Daten abzurufen.
select omID,
omText.query('/things/Fruit')
,cast('<results>' + cast(omText.query('/things/Fruit') as varchar(max)) + '</results>' as xml) as Value
from dbo.myTable
where omText.value('(/things/Fruit/imageId)[1]', 'int') = 76
Die funktioniert nur, wo die id, die ich bin auf der Suche für die erste in das Dokument. Es scheint nicht zu suchen, alle xml.
Grundsätzlich die Ergebnismenge, kommt zurück mit einer Zeile für jeden Eintrag in der TABELLE, während ich denke, ich muss eine Zeile für jedes passende ELEMENT... Nicht genau sicher, wie zu Beginn schreiben eines group-by für dieses tho.
Ich fange an zu fühlen, wie ich bin macht dies schwieriger, als es sein muss...... Gedanken & Vorstellungen bitte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob ich völlig verstanden, deine Frage hier - oder sind Sie auf der Suche nach diesem? Sie würde greifen alle /Dinge/Früchte-Elemente in einem "Knoten" und cross join-Sie gegen Ihre "Basis-Daten" in der myTable - das Ergebnis wäre eine Zeile pro XML-element in Ihrem XML-Daten field:
Ist, dass das, was du suchst?
Marc