[英]Pair XML Attribute and Other Attributes with Parent Attribute Value SQL Server 2008
[英]Update xml node attributes in SQL Server, filtering on other attribute
我正在嘗試更新XML列中的節點屬性,但被卡住了。 可以肯定的是,直到一天前, XQuery還是對我來說是白噪聲,我可以繼續堅持下去,但這會傷害我的客戶。 我拖網左右上下,還是一樣卡住。
因此,這是我設置的相關部分:
CREATE TABLE Tbl(Id int IDENTITY, XmlCol XML)
INSERT Tbl VALUES(
'<root>
<item ID="1">some text input</item>
<item ID="7" PROP="10">1</item>
</root>
'
)
INSERT Tbl VALUES(
'<root>
<item ID="1">some other text input</item>
<item ID="8" PROP="10">1</item>
</root>
'
)
語境? 不要問我為什么,它是如此人為設計,您在嘗試理解它時會陷入困境。
對於ID屬性為“ 8”的所有項目節點,我需要將PROP屬性增加為30。完成后,我需要將ID屬性從“ 8”更新為“ 7”以匹配節點,從而有效地合並項目,同時保持PROP值分開。
這距離我已經很近了,但是SQL Server(或我)玩的不好。
DECLARE @newVal INT = 40
update Tbl
set XmlCol.modify('replace value of (/root/item[@ID="8"][@PROP="10"]/@PROP)[1]
with sql:variable("@newVal") ')
XQuery [Tbl.XMLCol.modify()]:“)”。
任何人?
您只需要在[]
使用and
,如下所示:
update Tbl set
XmlCol.modify('
replace value of (/root/item[@ID="8" and @PROP="10"]/@PROP)[1]
with sql:variable("@newVal")
')
我遇到類似@nkstr的類似問題。 @Roman Pekar的回答使我對如何更新屬性值,過濾其他屬性有了一個好主意。 這是我使用的SQL。
declare @X xml =
'<root>
<items>
<item ItemID="100">
<obj ObjID="0001" value="val1"/>
<obj ObjID="0002" value="val2"/>
<obj ObjID="0003" value="val3"/>
<obj ObjID="0004" value="val4"/>
</item>
<item ItemID="200">
<obj ObjID="0001" value="val1"/>
<obj ObjID="0002" value="val2"/>
<obj ObjID="0003" value="val3"/>
<obj ObjID="0004" value="val4"/>
</item>
</items>
</root>'
declare @ITEMID int = 200
declare @OBJID int = 0004
declare @NEWVAL int = 8888
--update ObjID 0004 at ItemID 200 into 8888 (this is a comment)
set @X.modify('replace value of (/root/items/item[@ItemID=sql:variable("@ITEMID")]/obj[@ObjID=sql:variable("@OBJID")]/@ObjID)[1] with sql:variable("@NEWVAL")')
select @X
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.