Sql server 如何将xml节点添加到xml DataColumn并在SQL中以字符串形式返回xml DataColumn
我有一张像下面这样的桌子。ID列应作为值与相应的ID列值一起添加到XML标记中,并作为一个XML标记返回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>
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一个小小的提示:最好指定插入的位置,如最后/第一个和之后/之前+从我这边