【发布时间】:2019-05-07 09:52:06
【问题描述】:
假设我有一个名为tblMap 的映射表,它只是将旧属性 ID 映射到新属性 ID(oldID -> newID)。值得注意的是:newID 不包含在 oldID 的列表中。
然后我有一个表tblData,其中包含一个xml 字符串,该字符串具有多个属性ids。我想用tblMap 中的newID 替换所有当前属性ids。如果在tblMap 中找不到 id 映射,那么它应该保持原样。关于如何实现这一点的任何提示?
我尝试了什么:
我试图使用XMLText.modify('replace value of ...') 强制执行某些操作,如This StackOverflow Article 中所述,但未能成功使其工作。
CREATE TABLE tblmap (
oldid INT,
newid INT
)
GO
INSERT INTO tblMap
VALUES
( 58, 1002),
( 85, 5002),
( 70, 3202),
(2, 2340),
(5, 7432)
GO
CREATE TABLE tblData ( [SourceID] int, [SourceRecID] bigint, [Value] xml )
GO
INSERT INTO tblData
VALUES
( 1, 0, N'<attributes><attribute id="58" value="0" /><attribute id="86" value="1" /><attribute id="85" value="1" /><attribute id="70" value="0" /><attribute id="38" value="0" /><attribute id="68" value="0" /><attribute id="42" value="1" /><attribute id="67" value="1" /><attribute id="62" value="1" /></attributes>' ),
( 1, 686, N'<attributes><attribute id="1" value="0.25" /><attribute id="4" value="1" /><attribute id="10" value="3" /><attribute id="11" value="1" /><attribute id="12" value="6" /></attributes>' ),
( 1, 687, N'<attributes><attribute id="1" value="2.00" /><attribute id="2" value="60.00" /><attribute id="3" value="-1" /><attribute id="5" value="252.00" /><attribute id="6" value="0" /><attribute id="7" value="1" /><attribute id="9" value="1" /><attribute id="10" value="1" /><attribute id="11" value="2" /><attribute id="12" value="10" /></attributes>' ),
( 1, 688, N'<attributes><attribute id="1" value="2.00" /><attribute id="2" value="60.00" /><attribute id="3" value="-1" /><attribute id="5" value="252.00" /><attribute id="6" value="0" /><attribute id="7" value="1" /><attribute id="11" value="2" /><attribute id="12" value="10" /></attributes>' )
SELECT *
FROM tblMap
GO
SELECT *
FROM tblData
GO
为方便起见,我在此处构建了所有架构/示例数据: https://rextester.com/MUMI61854
【问题讨论】:
-
那么,对于您的样本数据,您的预期结果是什么?
-
在每个属性元素中将 id=
替换为 id= -
另外,SQL Server 的版本是 2008 还是 2012?
-
SQL Server 2012
-
@Denis 现在你有 2008 年或 2012 年,我想我会根据你说 2008 年没有的评论更新你的问题?
标签: sql sql-server xml sql-server-2012