我在 XML 列中有一个简单的 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
如何使用此查询将值更新为 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
(与上面相同的更新) >分数>4
我可以在 xpath 中写 ofcourse :
替换 (/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...]')
最佳答案
如果你想连接字符串你应该使用concat如果 id
在您的情况下是一个整数,您需要将其转换为 concat
函数中的字符串。
在where子句中你可以过滤要更新的表的行,你不能在XML中指定要更新哪些节点。这必须在 xquery 表达式中完成。但是,您可以使用 exist在 where 子句中过滤掉真正需要更新的行。
update tbl1
set myXml.modify('replace value of (/Bands/Band[Score > 4]/Name/text())[1]
with concat(string(sql:column("id")), "lalalala")')
where myXml.exist('/Bands/Band[Score > 4]') = 1
关于sql-server - 使用 XQUERY 更新 SQL 服务器 xml 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594741/