Sie sollten dies ganz einfach tun können:
SELECT *
FROM WebPageContent
WHERE data.value('(/PageContent/Text)[1]', 'varchar(100)') LIKE 'XYZ%'
Die .value
Methode gibt Ihnen den tatsächlichen Wert an, und Sie können diesen als VARCHAR () zurückgeben, der Sie dann mit einer LIKE-Anweisung überprüfen können.
Wohlgemerkt, das wird nicht besonders schnell gehen. Wenn Sie also bestimmte Felder in Ihrem XML haben, die Sie häufig überprüfen müssen, können Sie:
- Erstellen Sie eine gespeicherte Funktion, die das XML abruft und den gesuchten Wert als VARCHAR () zurückgibt.
- Definieren Sie ein neues berechnetes Feld in Ihrer Tabelle, das diese Funktion aufruft, und machen Sie es zu einer PERSISTED-Spalte
Damit würden Sie im Grunde genommen einen bestimmten Teil des XML in ein berechnetes Feld "extrahieren", es beibehalten und dann sehr effizient danach suchen (zum Teufel: Sie können dieses Feld sogar INDEXIEREN!).
Marc
Eine weitere Option besteht darin, das XML als nvarchar umzuwandeln und dann nach der angegebenen Zeichenfolge zu suchen, als ob das XML ein nvarchar-Feld wäre.
Ich liebe diese Lösung, da sie sauber, leicht zu merken, schwer durcheinander zu bringen und als Teil einer where-Klausel verwendet werden kann.
EDIT: Wie Cliff es erwähnt, könnten Sie verwenden:
quelle
Eine andere Möglichkeit besteht darin, das XML als Zeichenfolge zu durchsuchen, indem Sie es in eine Zeichenfolge konvertieren und dann LIKE verwenden. Da eine berechnete Spalte jedoch nicht Teil einer WHERE-Klausel sein kann, müssen Sie sie wie folgt in ein anderes SELECT einschließen:
quelle
Dies ist, was ich basierend auf der Antwort von marc_s verwenden werde:
Geben Sie eine Teilzeichenfolge für die Suche zurück, in der die Suchkriterien vorhanden sind
quelle