Sql server 如何将xml节点添加到xml DataColumn并在SQL中以字符串形式返回xml DataColumn

Sql server 如何将xml节点添加到xml DataColumn并在SQL中以字符串形式返回xml DataColumn,sql-server,xml,sql-server-2008,Sql Server,Xml,Sql Server 2008,我有一张像下面这样的桌子。ID列应作为值与相应的ID列值一起添加到XML标记中,并作为一个XML标记返回 Ex: Specification | ID <car><Name>BMW</Name></car> | 245 <car><Name>Audi</Name></car> | 290 <car><Name>Skoda</Name>

我有一张像下面这样的桌子。ID列应作为值与相应的ID列值一起添加到XML标记中,并作为一个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> |
您可以像这样使用修改和插入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 
演示链接:

一些参考链接:
这是我能想到的一种方法。您可以使用剥离汽车名称的值,然后重新构建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

@MaheshAkula一个小小的提示:最好指定插入的位置,如最后/第一个和之后/之前+从我这边