Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Не може да се чете съдържание, когато XML има 2 обвивки

Проблемът няма нищо общо с броя на "обвивките" около вашите XML данни. Проблемът е:първата ви проба дефинира XML пространство от имена (xmlns="test.xsd" ) на <data> възел, но вашата заявка не зачита това.

Трябва да промените заявката си така, че да бъде нещо подобно:

-- Using the query() method
;WITH XMLNAMESPACES (DEFAULT 'test.xsd')
SELECT 
    T.customer.query('id').value('.', 'INT') AS customer_id,
    T.customer.query('name').value('.', 'VARCHAR(20)') AS customer_name
FROM 
    @data.nodes('data/subdata/customer') AS T(customer);

Тогава ще получите резултати...

Без тази XML декларация за пространство от имена вашата заявка ще работи добре - две обвивки или повече нямат никакво значение.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 - Условна заявка

  2. Възстановете само данни с SQL Server 2008

  3. Как да създадете псевдоним на база данни в SQL Server

  4. Прочетете множество таблици с релации с t-sql в DataSet

  5. DECRYPTBYASYMKEY() Не връща очаквана стойност