如何将xml节点添加到xml DataColumn并在SQL中将Xml Datacolumn作为字符串返回

时间:2017-04-24 14:47:05

标签: sql-server xml sql-server-2008

我有一张如下表格。 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> |

2 个答案:

答案 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