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

Методът xquery value() не работи и дава грешка

Какъв атрибут или елемент искате да извлечете от възли?? Не можете да конвертирате целия XML възел в bigint (както се опитва да направи вашата заявка....)

Опитвате ли се да извлечете стойност??

Тогава имате нужда от:

;WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions')
SELECT 
    XC.value('@LaborHours', 'decimal(18,4)')
FROM
    Production.ProductModel
CROSS APPLY
    Instructions.nodes('/root/Location') AS XT(XC)

Първо:тъй като има много <Местоположение> възли във вашия XML, трябва да използвате CROSS APPLY и .nodes() функция за получаване на всички xml възли.

Второ, тъй като искате да извлечете атрибута Работни часове (мое предположение), трябва да използвате .value('@LaborHours )` подход.

И накрая, тъй като тези стойности са 1.0 или 2.5 , трябва да използвате decimal (с подходяща точност и мащаб), за да получите тези стойности - не bigint ...




  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 като GeomUnion в Postgres

  2. Вътрешни елементи за репликация на транзакции на SQL Server

  3. Създайте заявка в SQL Server 2017

  4. Редки колони в SQL Server:Въздействие върху времето и пространството

  5. Най-добрият начин да получите идентичност на вмъкнатия ред в свързания сървър?