在 SQL Server 中使用 T-SQL 将 XML 节点值更新为小写

问题描述 投票:0回答:1

我有一张包含一个 XML 数据类型列的表。 XML格式如下

表:根表

+----+------------------------------------------------------+
|Id  | Data                                                 |
+----+------------------------------------------------------+
|1   | <Root><Id>1</Id><SubRoot>Production</SubRoot></Root> |
+----+------------------------------------------------------+
|2   |  <Root><Id>1</Id><SubRoot>Test</SubRoot></Root>      |
+----+------------------------------------------------------+

我需要更新 XML,如下所示,

+----+------------------------------------------------------+
|Id  | Data                                                 |
+----+------------------------------------------------------+
|1   | <Root><Id>1</Id><SubRoot>production</SubRoot></Root> |
+----+------------------------------------------------------+
|2   |  <Root><Id>1</Id><SubRoot>test</SubRoot></Root>      |
+----+------------------------------------------------------+

这里我需要将 SubRoot 的值全部更新为小写。 请帮助我了解如何在 SQL Server 中使用 T-SQL 更新此内容。

sql sql-server xml t-sql
1个回答
0
投票

这有点难看,但它可以完成工作。

UPDATE RootTable
SET data = CAST(REPLACE(CAST(data AS varchar(max)), CAST(data.query('/Root/SubRoot') AS varchar(max)), '<SubRoot>' + lower(data.value('(/Root/SubRoot)[1]', 'varchar(max)')) + '</SubRoot>') as xml);

REPLACE
不会对 xml 类型进行操作,所以我们必须进行转换。

对于第二个参数,我采用整个 SubRoot 节点,以防这些值在另一个节点中重复,而您不希望它们为小写。如果您知道情况并非如此,那么您可以在第二个参数中仅采用

data.value
(因为它在第三个参数中使用)并从第三个参数中删除周围的节点值。

有一个

xml.modify
函数,但这需要一个字符串文字才能工作,而且我不知道如何使要修改的值依赖于它自己!

希望其他人可以提供更简洁的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.