Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O método xquery value() não está funcionando e está dando erro


Qual atributo ou elemento você deseja extrair do <Location> nós?? Você não pode converter todo o nó XML em um bigint (como sua consulta tenta fazer ....)

Você tenta extrair o <Location LaborHours="1.0"> valor??

Então você precisa:
;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)

Em primeiro lugar:uma vez que existem vários <Location> nós em seu XML, você deve usar CROSS APPLY e o .nodes() função para obter todos os <Location> nós xml.

Em segundo lugar, como você deseja recuperar o atributo LaborHours (minha suposição), você precisa usar o .value('@LaborHours )`.

E por último, como esses valores são 1.0 ou 2.5 , você deve usar decimal (com precisão e escala adequadas) para obter esses valores - não bigint ....