Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-XML vorhanden ()

Nun, Ihr XPath-Ausdruck hier ist der "Schuldige":

query('//branch')

Hier steht:alle auswählen <branch> Knoten aus dem gesamten Dokument. Es tut nur, was Sie ihm sagen, wirklich ....

Was ist an dieser Abfrage hier falsch??

SELECT 
    XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA

Das würde alle <branch> abrufen Unterknoten für <book> Knoten mit type="SF" als Attribut ....

Was versuchen Sie mit Ihrer query() zu erreichen , exist() und value() alles in der gleichen aussage?? Möglicherweise geht es auch viel einfacher....

Außerdem:Ich glaube, Sie interpretieren falsch, was .exist() ist in SQL Server XQuery tut. Wenn Sie Ihre Aussage hier haben:

 SELECT (some columns)
 FROM dbo.TableA
 WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1

im Grunde weisen Sie SQL Server an, alle Zeilen aus dbo.TableA abzurufen wobei das XML in XMLData gespeichert ist enthält einen <book type=.....> Knoten - Sie wählen Zeilen aus der Tabelle aus - NICHT Anwenden einer Auswahl auf die XMLData Inhalt der Spalte...