Ho una semplice XML in una colonna XMLAggiornare la colonna xml del server SQL utilizzando XQUERY?
<Bands>
<Band>
<Name>beatles</Name>
<Num>4</Num>
<Score>5</Score>
</Band>
<Band>
<Name>doors</Name>
<Num>4</Num>
<Score>3</Score>
</Band>
</Bands>
sono riuscito ad aggiornare la colonna con:
-----just update the name to the id)----
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id")')
tutti bene.
Domanda # 1
Come posso usare questa query per udpate il valore id+"lalala"
:
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id") + "lalala"')
errore = XQuery [tbl1.myXml.modify()]: L'argomento di '+' deve essere di un solo tipo primitivo numerico
domanda # 1
01.235.Diciamo che non voglio aggiornare il primo record ([1]
), ma voglio udpate
(lo stesso aggiornamento di cui sopra) solo dove score>4
.
posso scrivere naturalmente nel XPath:
replace value of (/Bands/Band[Score>4]/Name/text())[1]
Ma non voglio farlo nel XPath. Non c'è un modo normale per farlo con una clausola Where
?
qualcosa di simile:
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id") where [...score>4...]')
perché hanno fatto questa cosa '[1]'? Non pensavano che forse volevo aggiornare 'più di 1 elemento'? –
@RoyiNamir La documentazione che dice "Expression1 deve essere un singleton statico". è [qui] (http://msdn.microsoft.com/en-us/library/ms190675.aspx). È lo stesso per 'insert' ma' delete' può cancellare più di un nodo. Non so davvero perché scelgono di farlo in quel modo, ma se fosse permesso, potresti finire in alcune strane situazioni in cui i nodi modificati cambiano il predicato che ha trovato i nodi che avevano bisogno di essere modificati in primo luogo. Se è necessario aggiornare più di un nodo, è necessario farlo in un ciclo while. –
Grazie. Scelgo questa risposta perché è meno lunga e più leggibile. Ma grazie mille per entrambe le risposte! –