Forums Neueste Beiträge
 

Löschen von Daten in SQL-Datenbank

01/02/2010 - 10:48 von Roman Studer | Report spam
Hallo zusammen!

Ich benutze eine SQL-Server Express 2005 für die Speicherung von Log-Daten.
Zyklisch sollen diese Daten gelöscht werden.
Nun ist es bei einem Kunden so, dass es zu viele Daten miteinander gelöscht
werden sollen.

Vorher habe ich es so gelöst:


con = OpenSQLConnection(sServerComputerName)
cmd.CommandText = "DELETE FROM Logger WHERE TimeStamp <'" &
Format(DateAdd(DateInterval.Day, -iDays, Now), "dd.MM.yyyy HH:mm:ss") & "'"
iCount = cmd.ExecuteNonQuery()

Nun kam aber ein Timeout-Fehler beim Löschen.
Darum möchte ich jetzt nur immer ein gewisse Anzahl Zeilen löschen. Zuerst
werden die Anzahl Datensàtze ausgelesen und dann die untenstehenden
Anweisungen
dementsprechend wiederholt.

da = New SqlDataAdapter("SELECT TOP 1000 * FROM Logger WHERE TimeStamp <'" &
Format(DateAdd(DateInterval.Day, -iDays, Now), "dd.MM.yyyy HH:mm:ss") & "'",
con)
dt = New DataTable
da.Fill(dt)
For iRow = 0 To dt.Rows.Count - 1
cRow = dt.Rows.Item(iRow)
cRow.Delete()
Next iRow

Dim cb As New SqlCommandBuilder(da)
da.Update(dt)
da.Dispose()

Gibt es hier noch eine elegantere Lösung?

Wàre sehr froh, wenn jemand noch Tipps hàtte.



Gruss Roman
 

Lesen sie die antworten

#1 Stefan Hoffmann
01/02/2010 - 11:11 | Warnen spam
hallo Roman,

On 01.02.2010 10:48, Roman Studer wrote:
Ich benutze eine SQL-Server Express 2005 für die Speicherung von Log-Daten.
Zyklisch sollen diese Daten gelöscht werden.
Nun ist es bei einem Kunden so, dass es zu viele Daten miteinander gelöscht
werden sollen.
Gibt es hier noch eine elegantere Lösung?


Wenn die Tabelle nicht referenziert wird:

SELECT * INTO temp FROM Logger WHERE Timestamp => ##;
DROP TABLE Logger;
EXEC sp_rename 'temp', 'Logger';

und ggf. ein Neuerstellen deiner Indizes.

mfG

Ähnliche fragen