【问题标题】:SQL query update nvarchar with XML contents add missing attribute to nodeSQL 查询使用 XML 内容更新 nvarchar 向节点添加缺少的属性
【发布时间】:2017-09-05 22:09:12
【问题描述】:

我有一个包含 XML 内容的 nvarchar 列。不确定它是否需要转换为 XML。所有 XML 内容的格式都相同,只是需要修改一些记录,其中第一个节点需要添加一个属性:

<MyFirstNode SomeAttribute="value" SomeOtherAttribute="anothervalue">

更新到:

<MyFirstNode SomeAttribute="value" AddThisAttribute="nicevalue" SomeOtherAttribute="anothervalue">

如何使用 AddThisAttribute="nicevalue" 更新所有必需的节点?都需要相同的属性和值。

【问题讨论】:

  • 如果您的列包含 XML,是否有原因是 NVARCHAR 而不是 XML?我想您的选择归结为将其转换为 XML 并使用 modify('insert attribute AddThisAttribute {("nicevalue")} into (*)[1]') 函数或按原样为您的列编写(可能很复杂)STUFF 语句。

标签: sql sql-server xml tsql sqlxml


【解决方案1】:

如果这实际上将被解释为 XML,则不必在属性列表的中间插入 AddThisAttribute="nicevalue";一种选择是做一个简单的

UPDATE myTable
SET XMLColumn = REPLACE(XMLColumn, '<MyFirstNode ', '<MyFirstNode AddThisAttribute="nicevalue" ')

这可能比尝试插入值更容易,尤其是当 SomeAttribute 和 SomeOtherAttribute 在每一行中发生变化时。

或者,

UPDATE myTable
SET XMLColumn = REPLACE(XMLColumn, ' SomeOtherAttribute=', ' AddThisAttribute="nicevalue"  SomeOtherAttribute=')

可能会起作用,但如果“SomeOtherAttribute”出现在 MyFirstNode 以外的其他节点类型中,这可能会产生不希望的更改。

【讨论】:

  • 我将此设置为正确答案,但这是一个 nvarchar,我认为您需要先将其转换为 XML,然后才能将其更新为 XML 列。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多