Ho un tavolo molto grande, quindi mi sto usando il seguente per eliminare le voci più vecchie:SQL Server eliminare utilizzando ciclo WHILE non funziona
WHILE (@@ROWCOUNT > 0)
BEGIN
DELETE TOP (5000) FROM myTable
WHERE date < 20130103
END
ho eseguito un paio di volte con date diverse. A volte funziona bene (dura circa 20 minuti), ma altre volte la query termina immediatamente e nulla è stato cancellato. Quando ciò accade, eseguo semplicemente una semplice istruzione SELECT da quella tabella, quindi riprovo l'istruzione WHILE sopra riportata e quindi funziona! Qualcuno sa perché questo è? Ho bisogno di automatizzare questa query per funzionare regolarmente per controllare le dimensioni della tabella, ma voglio assicurarmi che in realtà venga eliminata correttamente quando viene eseguita. Grazie.
Non dovrebbe essere la data scritto come ' '2013-01-03'' piuttosto che come un numero? –
Divertente che ogni risposta lo abbia totalmente perso. –
Si noti inoltre che il solo ciclo non riduce necessariamente l'impatto sul log o sulla concorrenza a seconda che si tratti di una singola transazione.Vorrei smettere di usare @@ ROWCOUNT per il controllo, aggiungere transazioni all'interno del ciclo e impostare una variabile = @@ ROWCOUNT. Vedere http://www.sqlperformance.com/2013/03/io-subsystem/chunk-deletes –