ich einen sehr großen Tisch, so dass ich bin mit dem folgend älteren Einträge löschen:SQL-Batch-Server löscht, während Schleife nicht
WHILE (@@ROWCOUNT > 0)
BEGIN
DELETE TOP (5000) FROM myTable
WHERE date < 20130103
END
Ich betreiben habe dies ein paar Mal verschiedene Daten verwendet wird. Manchmal funktioniert es gut (dauert etwa 20 Minuten), aber zu anderen Zeiten wird die Abfrage sofort beendet und nichts wurde gelöscht. Wenn das passiert, mache ich einfach eine einfache SELECT-Anweisung aus dieser Tabelle und versuche dann die obige WHILE-Anweisung erneut, und dann funktioniert es! Wer weiß, warum das so ist? Ich muss diese Abfrage automatisieren, um regelmäßig die Tabellengröße zu steuern, aber ich möchte sicherstellen, dass es tatsächlich ordnungsgemäß löscht, wenn es ausgeführt wird. Vielen Dank.
Sollte nicht das Datum geschrieben werden als ' '2013-01-03'' und nicht als Nummer? –
Komisch, dass jede Antwort das komplett vermisst hat. –
Beachten Sie auch, dass das Vorhandensein einer Schleife nicht unbedingt die Auswirkungen auf das Protokoll oder die Nebenläufigkeit reduziert, je nachdem, ob es sich um eine einzelne Transaktion handelt.Ich würde aufhören zu @@ ROWCOUNT für die Kontrolle, fügen Sie Transaktionen innerhalb der Schleife, und legen Sie eine Variable = @@ ROWCOUNT. Siehe http://www.sqlperformance.com/2013/03/io-subsystem/chunk-deletes –