IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
SELECT IdArgomento, IdPagina, OrdineVis
INTO #tmp
FROM PagineArgomenti_tb
WHERE IdArgomento = 171
ORDER BY OrdineVis
DECLARE @Newpos smallint
SELECT @Newpos = 0
UPDATE #tmp
SET @Newpos = OrdineVis = @Newpos + 10
UPDATE p
SET p.OrdineVis = t.OrdineVis
FROM PagineArgomenti_tb p
INNER JOIN #tmp t
ON p.IdArgomento = t.IdArgomento
AND p.IdPagina = t.IdPagina
Oppure, con la funzione ROW_NUMBER()
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
SELECT IdArgomento, IdPagina, ROW_NUMBER() OVER (ORDER BY OrdineVis) AS OrdineVis
INTO #tmp
FROM PagineArgomenti_tb
WHERE IdArgomento = 171
UPDATE p
SET p.OrdineVis = t.OrdineVis
FROM PagineArgomenti_tb p
INNER JOIN #tmp t
ON p.IdArgomento = t.IdArgomento
AND p.IdPagina = t.IdPagina
L'ORDER BY è dentro la OVER().
Se voglio un progressivo e basta, si può fare ROW_NUMBER() OVER (ORDER BY GETDATE())