Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

xquery value() metodo non funziona e dà errore

Quale attributo o elemento vuoi estrarre da <Location> nodi?? Non puoi convertire l'intero nodo XML in un bigint (come tenta di fare la tua richiesta....)

Provi ad estrarre il <Location LaborHours="1.0"> valore??

Allora hai bisogno di:

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

Innanzitutto:poiché ce ne sono più <Location> nodi nel tuo XML, devi usare CROSS APPLY e il .nodes() funzione per ottenere tutto il <Location> nodi xml.

In secondo luogo, poiché desideri recuperare l'attributo LaborHours (la mia ipotesi), è necessario utilizzare il .value('@LaborHours )` approccio.

E infine, poiché quei valori sono 1.0 o 2.5 , devi utilizzare decimal (con precisione e scala adeguate) per ottenere quei valori, non bigint ....