2011-01-03 11 views
6

Vor dem Ausführen eines sensiblen SQL-Befehls wollte ich eine Plausibilitätsprüfung durchführen.Löschen von Datensätzen mit einem Datum, das älter als 3 Tage ist, für einen 3-Tage-Job?

ich Aufzeichnungen zu löschen versuchen, die einen [LoadDt] Datumswert älter als 3 Tage haben und mein Code:

delete IntraDayStats 
where DATEDIFF(dd, LoadDt, dateadd(d,-3, getdate())) >= 3 

ich dies als ein SQL-Auftrag planen möge, so dass meine IntraDayStats Tabelle a hat rollende 3-Tage-Geschichte. Der Job wird jeden Abend laufen.

Antwort

9
where DATEDIFF(dd, LoadDt, dateadd(d,-3, getdate())) >= 3 

ist nicht sargable (ein Index nicht verwendet werden), verwenden

where LoadDt < getdate()- 3 

Das nächste Mal, wenn Sie überprüfen möchten, machen die DELETE ein SELECT und sehen, was Sie zurück

+0

Was ist Sargable? Ich habe noch nie davon gehört ... Ich habe die Auswahl getroffen, aber ich wollte die Logik für eine rollende drei Tage überprüfen. danke – kacalapy

+0

http://en.wikipedia.org/wiki/Sargable – SQLMenace