【发布时间】:2021-02-18 17:42:08
【问题描述】:
我有一个带有 XML 列的 SQL 表。
表结构是
CREATE TABLE [dbo].[UserSettings](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[UserName] [varchar](100) NULL,
[Setting] [xml] NULL,
[CreateDate] [datetime] NOT NULL
)
设置 xml 列如下所示:
<UserSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserID>1</UserID>
<Reports>
<string>Report - 1</string>
<string>Report - 2</string>
<string>Report - 3</string>
<string>Report - 4</string>
</Reports>
</UserSettings>
我想将<Reports>中的报告-1更新为报告-一,报告-2更新为报告-二
另外,如果有一个值 Report - 4 那么我想从<Reports>中删除它
所以我在列中的最终结果应该是这样的:
<UserSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserID>1</UserID>
<Reports>
<string>Report - One</string>
<string>Report - Two</string>
<string>Report - Three</string>
</Reports>
</UserSettings>
编辑: 我已经尝试过 REPLACE 方法。我不确定这是否是最有效的方法。
update UserSettings
set Setting=REPLACE(convert(varchar(max),Setting),'<string>Report - 1</string>','<string>Report - One</string>')
where convert(varchar(max),Setting) like '%<string>Report - 1</string>%'
编辑: 我读到了modify() method,但报告的顺序可以是任何顺序。我无法让我的查询使用它。
【问题讨论】:
-
你试过什么?你在哪里卡住了?
-
您阅读过modify() method 文档吗?
标签: sql sql-server xml tsql