This is the section of my xml I am trying to modify:
<ORDER ORDER_NAME="10009999"
ORDER_NAME is an attribute.
This is what I have come up with so far and I think it’s close, but slightly off.
update table_name set txn_message.modify('replace value of (/ORDER/@ORDER_NAME)[.=1000][1] with "2000"') , txn_status = 1 
I want to replace 10009999 with 20009999 (really just something else to make it different so data can be reused, adding a additional character is also fine).
Advertisement
Answer
One way is
update t 
   set txn_message.modify('replace value of (/ORDER/@ORDER_NAME)[1] with concat("2", sql:column("vr"))')
from table_name t
cross apply (
  select left(t.txn_message.value('(/ORDER/@ORDER_NAME)[1]','varchar(20)'), 1) vl
        , substring (t.txn_message.value('(/ORDER/@ORDER_NAME)[1]','varchar(20)'), 2, 8000) vr
  ) v
where vl = '1';