我必须修改表字段值中的现有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;
附近的语法错误
..我们如何动态地将其指定为表达式。
任何帮助都将不胜感激。
答案 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>