Sql 基于XML类型列中的匹配项更新XML节点值
我有一个带有XML列的SQL表 表结构是Sql 基于XML类型列中的匹配项更新XML节点值,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,我有一个带有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列如下所示: <
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>
<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>
我想在中更新Report-1到Report-1,Report-2到Report-2
而且,如果有一个值报告-4,那么我想从中删除它
因此,我在专栏中的最终结果应该如下所示:
<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>
<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>
编辑:
我尝试过替换方法。我不确定这是否是最有效的方法
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>%'
编辑:
我读过,但报告的顺序可以是任意顺序。我无法让我的查询使用它。简单的方法是使用Replace as string,但是,如果您不想在任何地方(例如标记之外)替换该值,则此方法没有用处
你可以尝试另一种方法 与查找和替换(即修改)不同,可以通过XQuery及其FLWOR表达式动态组合XML SQL
你试过什么?你在哪里卡住了?你读过文档了吗?