SQL Server XML обновляет значение последнего узла - PullRequest
0 голосов
/ 25 сентября 2018

Есть ли способ обновить значение userid в последнем узле в SQL Server?Я нашел решение, но оно требует значения индекса.Количество узлов не всегда будет одинаковым 2, в некоторых случаях оно может быть 3.

<audit>  
  <home>
    <create timestamp="2017-10-16 12:19:28" userid="20" />
    <create timestamp="2018-09-25 11:21:21" userid="130" />
  </home>
</audit>

1 Ответ

0 голосов
/ 25 сентября 2018

Вам необходимо использовать функцию XML modify .

declare @data xml = '
    <audit>  
      <home>
        <create timestamp="2017-10-16 12:19:28" userid="20" />
        <create timestamp="2018-09-25 11:21:21" userid="130" />
      </home>
    </audit>
'

declare @new_id int = 150

set @data.modify('
    replace value of (//create)[last()]/@userid
    with sql:variable("@new_id")
')

SELECT @data

/*
<audit>  
    <home>
    <create timestamp="2017-10-16 12:19:28" userid="20" />
    <create timestamp="2018-09-25 11:21:21" userid="150" />
    </home>
</audit>
*/
...