sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server XML existerar()

Tja, ditt XPath-uttryck här är "boven":

query('//branch')

Detta säger:välj alla <branch> noder från hela dokumentet. Den är bara att göra vad du säger åt den att göra, verkligen...

Vad är det för fel på den här frågan?

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

Det skulle hämta alla <branch> subnoder för <book> nod som har type="SF" som ett attribut...

Vad försöker du uppnå med din query() , exist() och value() alla i samma uttalande?? Helt möjligt kan det göras mycket enklare...

Dessutom:Jag tror att du misstolkar vad .exist() i SQL Server gör XQuery. Om du har ditt uttalande här:

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

du säger i princip åt SQL Server att hämta alla rader från dbo.TableA där XML lagras i XMLData innehåller en <book type=.....> nod - du väljer rader från tabellen - NOT tillämpa ett urval på XMLData kolumns innehåll...



  1. Förstå vikten av minnesinställning i SQL Server

  2. SQLite FULL OUTER JOIN-emulering

  3. Infoga hex-värden i MySql

  4. Hur kan jag verifiera i Postgresql att JSON är giltigt?