XPath-in T-SQL-Abfrage

Ich habe zwei Tabellen, XMLtable und filterTable.

Ich brauche alle XMLtable.ID Werte von XMLtable wo die Daten in Col_X enthält MyElement, der Inhalt entspricht filterColumn im filterTable.

Den XML-Code für jede Zeile in Col_X enthält möglicherweise mehrere MyElement's, und ich will, dass ID im Falle JEDES dieser Elemente Stimmen die Werte in filterColumn.

Das problem ist, dass die Spalten, die tatsächlich von varchar(max) Datentyp, und die Tabelle selbst ist riesig (wie 50 GB groß). Also diese Abfrage muss so optimiert wie möglich.

Hier ist ein Beispiel für, wo ich jetzt bin, die nur gibt die Zeile, wo das erste übereinstimmende element entspricht einer von denen, die ich Suche. Durch eine Vielzahl von unterschiedlichen Fehlermeldungen, ich kann nicht scheinen, um in der Lage sein, dies zu ändern, zu vergleichen, alle gleichnamigen Elemente, wie ich will.

SELECT ID, 
   CAST(Col_X AS XML).value('(//*[local-name()=''MyElement''])', N'varchar(25)') 
FROM  XMLtable

...und dann die Ergebnisse vergleichen zu filterTable. Dies nimmt schon 5+ Minuten.

Was ich versuche zu erreichen, ist so etwas wie:

SELECT ID
FROM XMLtable
WHERE CAST(Col_X AS XML).query('(//*[local-name()=''MyElement''])') 
   IN (SELECT filterColumn FROM filterTable)

Nur so kann ich derzeit erzielen, ist die Nutzung des LIKE-operator, die nimmt, wie tausend mal länger.

Nun, offensichtlich ist es nicht eine option, um die änderung der Datentypen von Spalten oder sonst was. Dies ist, was ich habe, mit zu arbeiten. 🙂

Können Sie uns zeigen, ein Beispiel für eine XML und erklären, was Sie wollen daraus zu extrahieren?
Würde ich machen, da ich natürlich nicht geben kann, die echte XML hier. Es ist überall Dutzende, Hunderte von Zeilen von verschiedenen Elementen, wo MyElement kann zwischen 0 und X-mal. Ich möchte zu finden der ID ' s für die Zeilen, in denen es erscheint, und einer von die, die Instanzen enthält, die Werte in der anderen Tabelle.

InformationsquelleAutor Kahn | 2012-09-28

Schreibe einen Kommentar