使用 XPath/XQuery 在 SQL 列中创建子节点
我有一个 sql 表,其中有一个名为 CasingRules 的 xml 列,其中包含以下数据:
<root>
<Item>
<RegularExpression>^Mc[A-Z,a-z]*</RegularExpression>
<Format>ULU</Format>
</Item>
<Item>
<RegularExpression>^Mac[A-Z,a-z]*</RegularExpression>
<Format>ULLU</Format>
</Item>
</root>
我正在尝试使用 MS SQL 的修改方法将新节点“ApplyTo”添加到每个项目中,以创建类似以下内容的内容:
<root>
<Item>
<RegularExpression>^Mc[A-Z,a-z]*</RegularExpression>
<Format>ULU</Format>
<ApplyTo>NameAndAddress</ApplyTo>
</Item>
<Item>
<RegularExpression>^Mac[A-Z,a-z]*</RegularExpression>
<Format>ULLU</Format>
<ApplyTo>NameAndAddress</ApplyTo>
</Item>
</root>
.. 但我我是 XPath 的新手,甚至不确定是否可以在一个查询中更新多个节点?有没有一种优雅的方法来实现这一目标?
我期望语法是这样的,但它不起作用:
UPDATE TableName
SET CasingRules.modify('insert <ApplyTo>NameAndAddress</ApplyTo> as last into (/root//Item[1])')
I have a sql table with an xml column named CasingRules, which would contain data such as:
<root>
<Item>
<RegularExpression>^Mc[A-Z,a-z]*</RegularExpression>
<Format>ULU</Format>
</Item>
<Item>
<RegularExpression>^Mac[A-Z,a-z]*</RegularExpression>
<Format>ULLU</Format>
</Item>
</root>
I'm trying to use MS SQL's modify method to add a new node 'ApplyTo' into each item, to create something like:
<root>
<Item>
<RegularExpression>^Mc[A-Z,a-z]*</RegularExpression>
<Format>ULU</Format>
<ApplyTo>NameAndAddress</ApplyTo>
</Item>
<Item>
<RegularExpression>^Mac[A-Z,a-z]*</RegularExpression>
<Format>ULLU</Format>
<ApplyTo>NameAndAddress</ApplyTo>
</Item>
</root>
.. but I'm very much a newbie to XPath, and not even sure if its possible to update multiple nodes in one query? Is there an elegant way to achieve this?
I'm expecting the syntax is something like this, but its not working:
UPDATE TableName
SET CasingRules.modify('insert <ApplyTo>NameAndAddress</ApplyTo> as last into (/root//Item[1])')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此 XQuery:
输出:
This XQuery:
Output:
不太确定 MSSQL 中的 XQuery 支持是否可以处理这个问题,但如果有人知道更好的话,我会很高兴听到其他情况(并切换接受的答案)。
所以与此同时,我用 C# 进行了更新:
Not so sure XQuery support in MSSQL can handle this, but will be happy to hear otherwise (and switch the accepted answer) if anyone knows better.
So in the meantime, I updated in C# instead: