使用modify方法在sql中插入xml

时间:2014-05-16 06:27:17

标签: sql-server xml

我必须修改表字段值中的现有xml。 每个行值都有不同的xml标记,如

1排。 '<root><comments><comment>comments1</comment><comment>comments2</comment></comments></root>'

2排。

'<Users><User><Name>MAK</Name></User><User><Name>DANNY</User></Users>'

我需要添加标记<Resource>some ID</Resource> 在根节点之后。

喜欢'<Users>**<Resource>some ID</Resource>**<User><Name>comments1</Name></User><User><Name>comments2</User></Users>'

我尝试使用以下代码。

declare @xml xml
set @xml = '<root><comments><comment>comments1</comment><comment>comments2</comment></comments></root>'
declare @Note varchar(10)
declare @insertnode nvarchar(100)
set @insertnode='commeressd'
declare @mainnode varchar(50)
set @mainnode='(//root)[1]'
set @Note = 'comment3'
SET @xml.modify('insert <Resource>{xs:string(sql:variable("@insertnode"))}</Resource> as first into {xs:string(sql:variable("@mainnode"))}')
select @xml

之后的表达式

  

正在给出错误

  

XQuery [modify()]:&#39; {&#39;

附近的语法错误

..我们如何动态地将其指定为表达式。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用/*[1]找到&#34;第一个&#34;您希望插入发生的根节点。

declare @xml xml
set @xml = '
<root>
  <comments>
    <comment>comments1</comment>
    <comment>comments2</comment>
  </comments>
</root>'

declare @insertnode nvarchar(100)

set @insertnode='ResourceID'

set @xml.modify('insert element Resource {sql:variable("@insertnode")} as first into /*[1]')

select @xml

结果:

<root>
  <Resource>ResourceID</Resource>
  <comments>
    <comment>comments1</comment>
    <comment>comments2</comment>
  </comments>
</root>