Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Die Methode xquery value() funktioniert nicht und gibt einen Fehler aus

Welches Attribut oder Element möchten Sie aus <Location> extrahieren Knoten?? Sie können nicht den gesamten XML-Knoten in einen bigint konvertieren (wie es Ihre Abfrage versucht ...)

Versuchen Sie, <Location LaborHours="1.0"> zu extrahieren Wert??

Dann brauchen Sie:

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

Zunächst einmal:da es mehrere gibt <Location> Knoten in Ihrem XML müssen Sie CROSS APPLY verwenden und die .nodes() Funktion, um alle <Location> abzurufen xml-Knoten.

Zweitens, da Sie das Attribut abrufen möchten LaborHours (meine Annahme), Sie müssen den .value('@LaborHours verwenden )` Ansatz.

Und schließlich, da diese Werte 1.0 sind oder 2.5 , müssen Sie decimal verwenden (mit der richtigen Genauigkeit und Skalierung), um diese Werte zu erhalten - nicht bigint ....