none
Timeout bei löschen großer Datenmengen RRS feed

  • Frage

  • Hi , ich lösche mittels einer gespeicherten Prozedur (SQL Server 2005 Express) größere Datenmengen in einer Tabelle.
    Ich führe die SP von einem VB.Net Programm direkt aus. Bekomme hier aber immer einen Timeout Fehler.
    Lösche tue ich mit
    delete from ....  between @StartDatum and @EndeDatum

    kann ich den Timeout irgendwie mit Code umgehen? Ich möchte nichts direkt im Managementstudio ändern wollen.

    Gruss

    Freitag, 1. Juli 2011 07:55

Antworten

  •  

    Hallo Michael,

    Setze den CommandTimeout des SqlCommand auf 0, dann wird "endlos" gewartet -
    bzw. solange bis der Anwender einen Timeout hat und die Anwendung beendet oder den Rechner ausmacht ;-)

    Nützlich kann es sein, DELETE mit einer TOP-Klausel zu verbinden:

    DELETE TOP (10000) FROM ... between @StartDatum and @EndeDatum;
    IF @@ROWCOUNT = 0
      RETURN 1;
    ELSE 
      RETURN 0;
    
    und die Prozedur mehrfach aufzurufen bis @@ROWCOUNT = 0 ist.
    Als positiver Nebeneffekt wächst das Protokoll im Wiederherstellungsmodus einfach
    nicht so stark an - vorausgesetzt Du verwendest keine Transaktion.

    Gruß Elmar

     

    Freitag, 1. Juli 2011 09:34