È possibile aggiungere un TOP o una sorta di paging a un'istruzione SQL Update?Come posso eseguire un UPDATE SQL in lotti, come un aggiornamento superiore?
Ho un UPDATE
di query, che si riduce a qualcosa di simile:
UPDATE XXX SET XXX.YYY = #TempTable.ZZZ
FROM XXX
INNER JOIN (SELECT SomeFields ...) #TempTable ON XXX.SomeId=#TempTable.SomeId
WHERE SomeConditions
Questo aggiornamento interesserà milioni di dischi, e ho bisogno di farlo in lotti. Come 100.000 alla volta (l'ordine non importa)
Qual è il modo più semplice per farlo?
'top' come ordinato da che cosa? Come si riprende il secondo lotto dove finisce il primo? –
Una possibilità sarebbe quella di contrassegnare ogni record man mano che viene aggiornato, quindi aggiungere un'altra clausola ignorando i record che sono già stati aggiornati. Ciò richiederebbe l'aggiunta temporanea di una colonna alla tabella (a meno che non vi sia un modo efficace per stabilire se un record è stato aggiornato in virtù dell'aggiornamento stesso) – ean5533
Eh oke è stato semplice .. Ho provato con UPDATE TOP 100000, ma ciò dà una 'Sintassi errata vicino a 100000', l'aggiornamento TOP (100000) sembra funzionare. @ MartinSmith: Il "secondo lotto" non ha importanza nel mio caso. Quando il primo batch viene aggiornato, non corrisponderà più alla condizione where. –