【发布时间】:2022-01-02 04:41:09
【问题描述】:
我需要一个 SQL 脚本,它可以从数据库 [varchar(max)] 中提取一个 XML 字符串,对其进行检查并更新它如果它适合特定情况。
假设我的 xml 格式如下:
<root>
<level1>
<level2>
<level3 />
<level3 />
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="this one is not of interest">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for ABC">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
</root>
所以,我要做的是更新所有名称为“level6”且具有名为“here”的属性的元素,其值开始为“now is the time”。所以,这应该只匹配上面的两个元素。
但是,这不是唯一的选择标准。选项列表不能包含<option here="now" />。所以,这应该让我们只需要更新一个元素。
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
对于那个元素,然后我想添加缺少的<option here="now" />,这样就变成了:
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
所以,最终结果应该是:
<root>
<level1>
<level2>
<level3 />
<level3 />
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for XYZ">
<options>
<option this="that" />
<option me="you" />
<option here="now" /> // <- this one new
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="this one is not of interest">
<options>
<option this="that" />
<option me="you" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6 here="now is the time for ABC">
<options>
<option this="that" />
<option me="you" />
<option here="now" />
</options>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
</root>
假设我可以将数据库中的数据读入字符串,并且我知道如何更新数据库,那么实际上就是如何在SQL(SQL Server)中操作xml字符串。
【问题讨论】:
-
你试过什么? :)
标签: sql-server xml tsql xquery