2017-12-26 5 views
-1

Ich habe eine Tabelle, wo jeder Artikel einen nvarchar(max) Artikel mit xml Text haben. Ich brauche eine Möglichkeit, Zeichenfolge mit xml in der weniger Menge des angegebenen Tags zu wählen. Wie geht das schneller? Ich las über STRING_SPLIT aber es unterstützt nur mit db mit Kompatibilitätsgrad 130 und ich habe Kompatibilitätsgrad 110So wählen Sie Zeichenfolge mit weniger Menge von bestimmten xml-Tag mit SQL

So zum Beispiel habe ich zwei xml:

<main tag> 
<child> 
</child> 
<child> 
</child> 
</main tag> 

und

<main tag> 
<child> 
</child> 
</main tag> 

I muss

nehmen
<main tag> 
    <child> 
    </child> 
    </main tag> 

Weil th Die Menge von <child> Tag in der zweiten XML ist weniger als in der ersten XML-Zeichenfolge.

LÖSUNG Ich habe die Lösung gefunden. Und es ist ziemlich einfach.

Declare @TempXML Table (XMLText XML) 
Insert into @TempXML 
Select t.XMLString from dbo.MyXMLProcedure t 

Dann

Select t.XMLText.VALUE('count(/main tag/child)','int') from @TempXML t 
+2

Was db Ebene sind Sie an? Was bedeutet "weniger Menge des angegebenen Tags"? – NetMage

+0

Ich habe den Text der Frage bearbeitet. – ViliVi

+1

Welches [DBMS] (https://en.wikipedia.org/wiki/DBMS) Produkt verwenden Sie? Postgres? Orakel? "SQL" ist nur eine Abfragesprache, nicht der Name eines bestimmten Datenbankprodukts. –

Antwort

0

In der Regel können Sie die Anzahl von XML-Tags in einer XML-Zeichenfolge mit einfachen String-Operationen, bestimmen aber vorausgesetzt, Sie sind bereit, mit den Einschränkungen zu leben, können Sie verwenden:

(len(@string) - len(replace(UPPER(@string), UPPER(@xmltag), '')))/len(@xmltag) 

die Anzahl des Auftretens eines bestimmten Tages zu zählen (zB Verwendung @xmltag = '<CHILD').

Wenn Sie mit einem XML-Datentyp Spalte gearbeitet haben, können Sie die XQuery count Funktion verwenden:

SELECT xml.value('count /Main/Child') 
FROM table 
+0

Ja Es funktioniert. Aber die einzige Frage, wie schnell es Lösung? – ViliVi

+0

Ok was, wenn ich Tabellenvariable mit XML-Spalte erstellen und in alle Nvarchars mit XML einfügen. Welche Lösung wird in diesem Fall sein? Eigentlich kann ich das machen. Und ich arbeite für Tabelle mit XML-Spalte – ViliVi

+0

Relativ zu was? Dies hängt von Ihrer Umgebung (Servergeschwindigkeit, Arbeitsspeicher, Festplatte usw.) und der Größe der Datenbank/Zeichenkette ab. Ich würde es nicht als einen idealen Weg empfehlen, mit irgendetwas umzugehen. Wenn Sie die Datenbank ändern können, um die gewünschten Tag-Zählungen zu speichern, die bei einer Abfrage viel besser wären, dann hängt das wiederum davon ab, ob diese Abfrage häufig auftritt. – NetMage

Verwandte Themen