2016-03-29 5 views
3

Ich habe Daten wie diese in einer xml Säule:Wie Daten in XML-Spalte in SQL Server abzufragen

<product> 
    <productID>1</productID> 
    <productname>tea</productname> 
</product> 
<product> 
    <productID>2</productID> 
    <productname>coffee</productname> 
</product> 

ich den Wert von productname zu grünem Tee wo productID = 2 ändern möge.

Ich verwende:

UPDATE [dbo].ProductDocs 
SET ProductDoc.modify('replace value of (/Product/ProductName)[2] with "NewName"') 

Aber hier wird es immer den Wert im zweiten Produkt ändern. Bitte sagen Sie mir, wie Sie mit productID abfragen können.

Antwort

1

Als erstes zuerst, XML ist Groß-und Kleinschreibung und so sind die XQuery Ausdrücke.

Jetzt könnten Sie dies tun.

UPDATE [dbo].ProductDocs 
SET ProductDoc.modify('replace value of (/product[productID=2]/productname/text())[1] with "GreenTea"') 
+0

Einverstanden über die Groß-/Kleinschreibung. Aber die XQuery wird 'Syntax-Fehler' auslösen, weil '/ [some_expression]' kein gültiger Ausdruck ist. Darüber hinaus verweist 'productID/@ Value' auf das Attribut 'value' * attribute * des Elements' productID'. In der XML des OP gibt es kein solches Attribut. – har07

+0

@ har07 yeah .. Ich dachte, es war ein Wert, repariert es jetzt. –

2

Verwendung Prädikatenausdruck wie so product Element durch productID Wert zu filtern:

UPDATE [dbo].ProductDocs 
SET ProductDoc.modify(' 
    replace value of (/product[productID=2]/productname/text())[1] with "NewName" 
') 

auch bemerken, dass, wie in der anderen Antwort, XML und XPath/XQuery case-sensitiv ist erwähnt.