我有一张如下表格。 ID列应作为Value添加到XML标记中,并具有相应的ID列值并作为一个XML标记返回
Ex:
Specification | ID
<car><Name>BMW</Name></car> | 245
<car><Name>Audi</Name></car> | 290
<car><Name>Skoda</Name></car>| 295
输出应为
| Specification |
| <car><Name>BMW</Name><ID>245</ID></car><car><Name>Audi</Name><ID>290</ID></car><car><Name>Audi</Name><ID>295</ID></car> |
答案 0 :(得分:1)
您可以像这样使用modify()
和insert
xml
DECLARE @SampleData AS TABLE
(
Specification xml,
Id int
)
INSERT INTO @SampleData
VALUES
('<car><Name>BMW</Name></car>', 245),
('<car><Name>Audi</Name></car>', 290),
('<car><Name>Skoda</Name></car>', 295)
Update @SampleData SET Specification.modify('insert <Id>{sql:column("sd.Id")}</Id> into (/car)[1]')
FROM @SampleData sd
SELECT sd.* FROM @SampleData sd
演示链接:Rextester
一些参考链接:
modify xml
insert xml
答案 1 :(得分:0)
这是我能想到的一种方式。您可以使用.node去除汽车名称的值,然后重新构建XML。像,
CREATE TABLE #Temp
(
Specification XML,
ID INT
)
INSERT #Temp ( Specification, ID )
VALUES
('<car><Name>BMW</Name></car>', 245),
('<car><Name>Audi</Name></car>', 290),
('<car><Name>Skoda</Name></car>', 295)
SELECT * FROM
(
SELECT
Val.value('(text())[1]', 'varchar(32)') AS Name,
T.ID
FROM #Temp AS T
CROSS APPLY Specification.nodes('car/Name') AS Id(Val)
) X
FOR XML PATH('Name'), ROOT ('Car')
DROP TABLE #Temp