我有一個簡單的XML在XML列使用XQUERY更新SQL Server xml列?
<Bands>
<Band>
<Name>beatles</Name>
<Num>4</Num>
<Score>5</Score>
</Band>
<Band>
<Name>doors</Name>
<Num>4</Num>
<Score>3</Score>
</Band>
</Bands>
我設法與更新列:
-----just update the name to the id)----
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id")')
一切都很好。
問題#1
如何使用這個查詢來UDPATE值來id+"lalala"
:
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id") + "lalala"')
錯誤=的XQuery [tbl1.myXml.modify()]:的參數'+'必須是單個數字原始類型
問題1
比方說我不想更新第一個記錄([1]
),但我想udpate
(與上面相同的更新)只有在score>4
。
我可以在XPath ofcourse寫:
replace value of (/Bands/Band[Score>4]/Name/text())[1]
,但我不想這樣做在XPath。 Where
子句中沒有這樣做的正常方法嗎?
類似:
UPDATE tbl1
SET [myXml].modify('replace value of (/Bands/Band/Name/text())[1]
with sql:column("id") where [...score>4...]')
他們爲什麼要這樣做?[1]'東西?他們不覺得我可能想更新'超過1個元素'嗎? –
@RoyiNamir說「Expression1必須是一個靜態單例」的文檔。是[here](http://msdn.microsoft.com/en-us/library/ms190675.aspx)。 'insert'是相同的,但'delete'可以刪除多個節點。我不知道他們爲什麼選擇這樣做,但如果允許的話,最終會出現一些奇怪的情況,即修改後的節點會更改發現需要修改的節點的謂詞。如果你需要更新多個節點,你必須在while循環中完成。 –
謝謝。我選擇這個答案是因爲它不那麼長和更具可讀性。但非常感謝這兩個答案。 –