Sql server 2008 在SQL server中将新节点添加到xml数据中 declare@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" /> <

我们想向这个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" />
    <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