Sql server 2008 在SQL server中将新节点添加到xml数据中 declare@xml='xml' '
我们想向这个xml中添加额外的节点(最后还是第一个都不重要) 输出为Sql server 2008 在SQL server中将新节点添加到xml数据中 declare@xml='xml' ',sql-server-2008,sql-server-2012,xquery,xquery-sql,Sql Server 2008,Sql Server 2012,Xquery,Xquery Sql,我们想向这个xml中添加额外的节点(最后还是第一个都不重要) 输出为 declare @xml xml = '<?xml version="1.0"?> <dashboardsettings> <widgets> <widget userwidgetuniqueid="9" widgetid="9" daterange="1" startdate="2016-02-06" enddate="2017-02-06" /> <
declare @xml xml = '<?xml version="1.0"?> <dashboardsettings> <widgets>
<widget userwidgetuniqueid="9" widgetid="9" daterange="1" startdate="2016-02-06" enddate="2017-02-06" />
<widget userwidgetuniqueid="10" widgetid="10" daterange="0" startdate="2016-02-06" enddate="2017-02-06" />
<widget userwidgetuniqueid="11" widgetid="11" daterange="0" startdate="2016-02-06" enddate="2017-02-06" />
<widget userwidgetuniqueid="12" widgetid="12" daterange="3" />
<widget userwidgetuniqueid="13" widgetid="13" daterange="3" /> </widgets> </dashboardsettings>'
declare@xml=
'
'
--然后我编写代码来查找userwidgetuniqueid的最大值,并添加+1,还准备了新节点,但我无法将这个新节点添加到xml值,错误是 说明:XML数据类型方法“modify”的使用不正确。在此上下文中,需要一个非mutator方法
declare @xml xml =
'
<?xml version="1.0"?>
<dashboardsettings>
<widgets>
<widget userwidgetuniqueid="9" widgetid="9" daterange="1" startdate="2016-02-06" enddate="2017-02-06" />
<widget userwidgetuniqueid="10" widgetid="10" daterange="0" startdate="2016-02-06" enddate="2017-02-06" />
<widget userwidgetuniqueid="11" widgetid="11" daterange="0" startdate="2016-02-06" enddate="2017-02-06" />
<widget userwidgetuniqueid="12" widgetid="12" daterange="3" />
<widget userwidgetuniqueid="13" widgetid="13" daterange="3" />
<widget userwidgetuniqueid="14" widgetid="14" daterange="3" />
</widgets>
</dashboardsettings>
'
——下面是我的代码
声明@TopUserwidgetuniqueid int
选择top 1@TopUserwidgetuniqueid=x.y.value('.',int')
从@XML.nodes('/dashboardsettings/widgets/widget/@userwidgetuniqueid')作为x(y)
按x.y.值('.',int')描述排序
选择@TopUserwidgetuniqueid=@TopUserwidgetuniqueid+1
声明@xNewNode xml=''
将@xml=@xml.modify('insert sql:variable(@xNewNode')设置为/dashboardsettings/widgets[1]中的最后一个)
选择@xml
插入新节点的最后一个xml.modify无效,请帮助,
非常感谢
--below is my code
declare @TopUserwidgetuniqueid int
SELECT top 1 @TopUserwidgetuniqueid = x.y.value('.','int')
FROM @XML.nodes('/dashboardsettings/widgets/widget/@userwidgetuniqueid') AS x ( y )
order by x.y.value('.','int') desc
select @TopUserwidgetuniqueid=@TopUserwidgetuniqueid+1
declare @xNewNode xml = '<widget widgetid="'+cast(@TopUserwidgetuniqueid as varchar(10)) +'" daterange="2"></widget>'
SET @xml = @xml.modify('insert sql:variable("@xNewNode") as last into /dashboardsettings/widgets[1]')
select @xml