sql >> Base de Datos >  >> RDS >> Sqlserver

El método xquery value() no funciona y da error

¿Qué atributo o elemento desea extraer del <Location> nodos?? No puede convertir todo el nodo XML en un bigint (como intenta hacer su consulta...)

¿Intenta extraer el <Location LaborHours="1.0"> valor??

Entonces necesitas:

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

En primer lugar:dado que hay múltiples <Location> nodos en su XML, debe usar CROSS APPLY y el .nodes() función para obtener todos los <Location> nodos xml.

En segundo lugar, dado que desea recuperar el atributo LaborHours (mi suposición), debe usar .value('@LaborHours )` enfoque.

Y por último, dado que esos valores son 1.0 o 2.5 , debe usar decimal (con la precisión y la escala adecuadas) para obtener esos valores, no bigint ....