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

SQL Server XQuery zwraca błąd

Twoje wyrażenie XPath może prowadzić do zwrócenia wielu wierszy dla każdego wiersza w tabeli programu SQL Server. Musisz użyć CROSS APPLY i wywołanie .nodes() aby uzyskać informacje, których szukasz:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT 
    JobCandidateID,
    ResNames.value('(ns:Name.First)[1]', 'nvarchar(100)')
FROM   
    HumanResources.JobCandidate
CROSS APPLY
    [Resume].nodes('/ns:Resume/ns:Name') AS XTbl(ResNames)

To powinno zwrócić wszystkie JobCandidateID wartości i wszystkie imiona zdefiniowane w Resume Kolumna XML dla każdego wiersza w tabeli.

Jeśli możesz być pewien, że zawsze będzie tylko jeden <name> w Twojej kolumnie XML, możesz również skrócić go do:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT 
    JobCandidateID,
    [Resume].value('(/ns:Resume/ns:Name/ns:Name.First)[1]', 'nvarchar(100)')
FROM   
    HumanResources.JobCandidate



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz bazę danych SQL Server za pomocą SQLOPS

  2. Jak uniknąć zduplikowanych wartości w SQL Server

  3. serwer sql - sprawdź, czy rzutowanie jest możliwe

  4. Wstawianie wielu wartości do bazy danych SQL z programu EXCEL za pomocą skryptu VBA

  5. Metody oceniania wierszy w programie SQL Server:ROW_NUMBER(), RANK(), DENSE_RANK() i NTILE()