Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

XML serwera SQL istnieje()

Cóż, twoje wyrażenie XPath to „winowajca”:

query('//branch')

To mówi:wybierz wszystkie <branch> węzły z całego dokumentu. Po prostu robi to, co mu każesz, naprawdę…

Co jest nie tak z tym zapytaniem?

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

Spowoduje to pobranie wszystkich <branch> podwęzły dla <book> węzeł, który ma type="SF" jako atrybut....

Co chcesz osiągnąć za pomocą query() , exist() i value() wszystko w tym samym oświadczeniu? Całkiem możliwe, że można to zrobić o wiele łatwiej....

Ponadto:myślę, że błędnie interpretujesz to, co .exist() w SQL Server XQuery. Jeśli masz tutaj swoje oświadczenie:

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

w zasadzie mówisz SQL Serverowi, aby pobrał wszystkie wiersze z dbo.TableA gdzie XML jest przechowywany w XMLData zawiera <book type=.....> węzeł - wybierasz wiersze z tabeli - NIE zastosowanie zaznaczenia do XMLData zawartość kolumny...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć tabelę na podstawie innej tabeli?

  2. Jaki jest zalecany rozmiar partii dla SqlBulkCopy?

  3. Przydziel losowo miejsce pracy, a każda lokalizacja nie powinna przekraczać liczby wyznaczonych pracowników

  4. Zawijanie dowolnej instrukcji SQL Server 2008 z operatorami pomiń/wziąć

  5. Nieprawidłowa składnia w pobliżu „(” podczas sprawdzania fragmentacji indeksu