【发布时间】:2015-05-01 15:51:09
【问题描述】:
在我的应用程序中,用户可以选择要搜索的技能组,这些技能组存储为 XML。在这个简单的示例中,我在包含主 XML 索引的表中具有以下结构。
CREATE TABLE #myTable (ID int IDENTITY(1,1) PRIMARY KEY, userId int NOT NULL, searchXml xml not null);
GO
CREATE PRIMARY XML INDEX [Ix1] ON #myTable (searchXml) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
INSERT INTO #myTable (userId, searchXml) VALUES
(1, '<search><skills><s id="4" /><s id="10" /></skills></search>'),
(1, '<search><skills><s id="4" /><s id="8" /><s id="10" /></skills></search>'),
(2, '<search><skills><s id="7" /><s id="8" /><s id="10" /></skills></search>'),
(3, '<search><skills><s id="4" /><s id="10" /><s id="11" /></skills></search>');
SELECT * FROM #myTable;
DROP TABLE #myTable;
GO
我需要执行以下更新,但经过长时间的阅读后,我什至无法接近:
技能 ID 4 将与技能 ID 8 组合,只留下技能 ID 8。 因此,每条 XML 数据都需要通过以下方式更新:
- 如果同一个 XML 中存在 4 和 8,则删除 4,只留下 8
- 如果4孤立存在,则将4改为8
- 如果 8 单独存在,则不采取任何措施
谁能通过分享解决方案帮助我提高 XML 技能?
【问题讨论】:
-
你需要一个查询还是多个查询?
标签: sql-server tsql sql-server-2012 sqlxml