sql >> Databáze >  >> RDS >> Sqlserver

Metoda xquery value() nefunguje a dává chybu

Jaký atribut nebo prvek chcete extrahovat z <Location> uzly?? Nelze převést celý uzel XML na bigint (jak se váš dotaz pokouší udělat....)

Zkoušíte extrahovat <Location LaborHours="1.0"> hodnotu??

Pak potřebujete:

;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)

Za prvé:protože jich je více <Location> uzly ve vašem XML, musíte použít CROSS APPLY a .nodes() získat všechny <Location> xml uzly.

Za druhé, protože chcete načíst atribut LaborHours (můj předpoklad), musíte použít .value('@LaborHours ).

A konečně, protože tyto hodnoty jsou 1.0 nebo 2.5 , musíte použít decimal (s náležitou přesností a měřítkem), abyste získali tyto hodnoty – nikoli bigint ....




  1. Kurzy databáze SQL Server ( MSSQL DBA ) pro začínající správce databází

  2. pomoc se syntaxí výběru SQL

  3. Co je ekvivalentem černé díry?

  4. PHP:Získejte uživatelské jméno z relace