Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La méthode xquery value() ne fonctionne pas et donne une erreur

Quel attribut ou élément voulez-vous extraire du <Location> noeuds ? ? Vous ne pouvez pas convertir l'intégralité du nœud XML en un bigint (comme votre requête tente de le faire....)

Essayez-vous d'extraire le <Location LaborHours="1.0"> valeur ??

Ensuite, vous avez besoin :

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

Tout d'abord :puisqu'il existe plusieurs <Location> nœuds dans votre XML, vous devez utiliser CROSS APPLY et le .nodes() fonction pour obtenir tous les <Location> nœuds xml.

Deuxièmement, puisque vous souhaitez récupérer l'attribut LaborHours (mon hypothèse), vous devez utiliser le .value('@LaborHours )` approche.

Et enfin, puisque ces valeurs sont 1.0 ou 2.5 , vous devez utiliser decimal (avec une précision et une échelle appropriées) pour obtenir ces valeurs - pas bigint ....