使用修改方法在sql中插入xml

Posted

技术标签:

【中文标题】使用修改方法在sql中插入xml【英文标题】:Insert into xml in sql using modify method 【发布时间】:2014-05-16 06:27:16 【问题描述】:

我必须修改表字段值中的现有 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>'

我需要添加标签&lt;Resource&gt;some ID&lt;/Resource&gt; 在根节点之后。

点赞'&lt;Users&gt;**&lt;Resource&gt;some ID&lt;/Resource&gt;**&lt;User&gt;&lt;Name&gt;comments1&lt;/Name&gt;&lt;/User&gt;&lt;User&gt;&lt;Name&gt;comments2&lt;/User&gt;&lt;/Users&gt;'

我已尝试使用以下代码。

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()]: '' 附近的语法错误

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

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>

【讨论】:

以上是关于使用修改方法在sql中插入xml的主要内容,如果未能解决你的问题,请参考以下文章

sql 使用XQuery方法修改更新XML

在SQLServer中使用SQL语句插入数据出现乱码或问号的解决方法

SQL Server插入中文乱码

SQL Server修改标识列方法(备忘)

oracle 在xml中批量插入,批量修改及多组条件查询

mybatis.xml中sql编写规范