【发布时间】:2021-05-03 21:00:18
【问题描述】:
我有带有 XML 列的 3rd 方表,如果 key\string = 'recipient',我需要更改 value 中的收件人值。这是原始 XML 的一部分,包含 2 个项目:
DECLARE @myDoc XML
SET @myDoc = '<Root>
<item>
<key>
<string>subject</string>
</key>
<value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" p5:type="q1:string">test subject</anyType>
</value>
</item>
<item>
<key>
<string>recipient</string>
</key>
<value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" xmlns:p5="http://www.w3.org/2001/XMLSchema-instance" p5:type="q1:string">prodops@company.com</anyType>
</value>
</item>
</Root>'
SET @myDoc.modify('
declare namespace q1="http://www.w3.org/2001/XMLSchema"; declare namespace p5="http://www.w3.org/2001/XMLSchema-instance";
replace value of (/q1:Root/q1:item/q1:value/p5:type="q1:string")[1]
with ("devops@company.com")
')
SELECT @myDoc
到目前为止,我有点破解了我的方法 - XML 不是我的强项。基于 BOL,我需要对 modify() 中的命名空间做一些事情吗?正确的?我确定我错过了一个 if 语句,但这只是一个关于如何为收件人取消引用该值的谜团。以前有人这样做过——我敢肯定。目标是在刷新生产数据后合并到恢复后脚本中进行测试。
请注意,这会失败
消息 2337,第 16 级,状态 1,第 125 行 XQuery [modify()]: 'replace' 的目标最多只能是一个节点,找到 'xs:boolean ?'"
【问题讨论】:
标签: sql-server xml namespaces xquery updates