sql >> Database >  >> RDS >> Sqlserver

SQL Server XML bestaat()

Welnu, uw XPath-uitdrukking hier is de "boosdoener":

query('//branch')

Dit zegt:selecteer alle <branch> knooppunten uit het hele document. Het is gewoon doen wat je zegt dat het moet doen, echt....

Wat is er mis met deze vraag hier??

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

Dat zou alle <branch> . ophalen subnodes voor de <book> knooppunt met type="SF" als een attribuut....

Wat probeert u te bereiken met uw query() , exist() en value() allemaal in dezelfde verklaring?? Het is heel goed mogelijk dat het een stuk eenvoudiger kan....

Ook:ik denk dat je verkeerd interpreteert wat .exist() in SQL Server doet XQuery dat wel. Als je je verklaring hier hebt:

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

je vertelt SQL Server eigenlijk om alle rijen op te halen uit dbo.TableA waar de XML is opgeslagen in XMLData bevat een <book type=.....> node - u selecteert rijen uit de tabel - NIET een selectie toepassen op de XMLData inhoud van de kolom...



  1. gegevens migreren van MS SQL naar PostgreSQL?

  2. Transactiebereik en query's gebruiken

  3. Negatieve voorwaarde in Join

  4. EF6 Oracle Tijdstempel &Datum