ho avuto la necessità di rinumerare le righe in una tabella utilizzando il codice da un You've Been Haacked blog post:incremento automatico nella dichiarazione di aggiornamento con conseguente valori duplicati sul grande tavolo
DECLARE @counter int
SET @counter = 0
UPDATE #myTable
SET @counter = ID = @counter + 1
Questo funziona bene con alcuni record di diverse migliaia , ma quando lo eseguo su un'istanza di SQL Server 2012 (64-bit) su una tabella con record di 250K +, finisco con molti duplicati (l'ID # 1 appare 12 volte). In tutto, ci sono circa 27.000 record con valori duplicati. La cosa strana è che circa 19K hanno esattamente 12 duplicati (lo stesso numero di processori sulla mia macchina).
Qual è la causa dei duplicati?
Direi che questa istruzione viene eseguita in parallelo, non riga per riga. E quindi il contatore non viene incrementato "abbastanza velocemente"., –
Puoi pubblicare il tuo piano di query? – dsolimano
Questo non è il modo migliore per farlo. ROW_NUMBER sarebbe un approccio molto migliore come già detto da @GiorgiNakeuri. È possibile aggiungere il suggerimento query OPTION (MAXDOP 1) per evitare che si riversino su più di un processore. Tuttavia, è probabile che la performance ne risenta. –