You want to strip occurrences from 2 to n of the string " XXX - ". This involves storing data at the end:
SELECT 'Starting' --also sets @@ROWCOUNT WHILE @@ROWCOUNT <> 0 UPDATE Bollixedtable SET name = STUFF (name, 7, 6, '') WHERE SUBSTRING (name, 7, 6) = 'XXX - '
Otherwise, it will delete XXX and discard your data based on the template XXX - New(id-1) without filter if you want to start again
UPDATE Bollixedtable SET name = 'XXX - New' + CAST(id-1 AS varchar)
Edit: Updated for clarity.
source share