W tabeli w mojej datatime mam kolumnę datatime, która przechowuje czas, w którym rekord jest dodawany. Jak mogę usunąć wszystkie rekordy starsze niż dzień, w którym uruchamiam procedurę składowaną (biorąc pod uwagę bieżący czas)?Usuwanie elementów starszych niż jeden dzień - SQL Server
Odpowiedz
ja generalnie odradzam faktycznie usuwania danych z bazy danych, ponieważ nigdy nie wiadomo kiedy może trzeba wrócić i odzyskać lub wycofywania do poprzednich zapisów z powodu uszkodzenia danych lub audytu itp. Zamiast tego dodałbym nieco tytułu kolumny coś w stylu "IsDeleted" i ustawiłem stare wpisy na true przy użyciu instrukcji aktualizacji.
Coś
'UPDATE tablename SET IsDeleted = 1 WHERE (DATEDIFF(day,DateCreatedOn,GETDATE()) > 0)
Gdzie DateCreatedOn gdzie Twój rekord Utworzono lub data datownik pójdzie
To jest trudne uogólnienie, nie znając zestawu problemów. Istnieje tyle dobrych powodów, aby usuwać dane, ponieważ nie. Jeśli chcesz przywrócić lub odzyskać, dlatego masz kopie zapasowe. Jeśli standardowe działanie aplikacji oznacza, że nie potrzebujesz już danych, usuń dane. – Joe
Jeśli nigdy nie usuniesz danych, ostatecznie - nieuchronnie - przepełnione tabele spowodują obniżenie wydajności. Jeśli musisz przechowywać dane "na gorąco", skopiuj je do tabeli archiwum, a następnie usuń ze źródła, być może po godzinach, powinno być realną opcją. –
Przyznam, że jest trochę zbyt gorliwy, ale lepiej go mieć i nie potrzebować, a potem go nie mieć i potrzebować. Wyobraź sobie odpowiedź, jaką otrzymasz od klienta, który twierdzi, że potrzebuje wszystkich rekordów sprzedaży z aplikacji e-Commerce w ciągu ostatnich 5 lat, a odpowiedź na nie brzmi: "Usunęliśmy go, ponieważ był stary i obecnie nie jest potrzebny podanie". Tylko dlatego, że sama aplikacja może nie potrzebować danych, nie oznacza to, że klient jej nie potrzebuje i może obejść się bez nich. –
Jeśli chodzi o SQL, musisz określić, co masz na myśli przez "starszy niż dzień".
DateDiff: używa dniową brzegowy północy więc uruchomić go na 19 października 00:05 i będziesz usuwać wiersze 6 minut życia (18 października 23:59)
24 godzin?
Wczoraj o północy? Uruchom kod 19 października, usuń wiersze przed 18?
Nie należy również umieszczać funkcji w kolumnie.
Zakłada się przez 24 godzin do chwili:
DELETE
MyTableWhere
WHERE
MyColumn < DATEADD(day, -1, GETDATE())
przyjmuje, wczoraj północy:
DELETE
MyTableWhere
WHERE
MyColumn < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1)
Zakładając Data kolumny na "RecordCreatedDate"
usunąć z yourtable GDZIE RecordCreatedDate < DATAADD (d, -1, GETDATE())
Ostrzegam tylko, że jeśli baza danych zawiera miliony wierszy, powinieneś mieć indeks w kolumnie RecordCreatedDate i ewentualnie robić mniejsze operacje usuwania partii, jeśli usuniesz duże ilości danych.
usunąć z YourTable gdzie DateColumn < getdate() - 1
- 1. Usuwanie plików starszych niż pewna liczba dni
- 2. Usuwanie elementów tablicy dynamicznej jeden po drugim
- 3. Odejmij jedna godzina z datetime niż jeden dzień
- 4. SQL: Jak wybrać jeden rekord na dzień, zakładając, że każdy dzień zawiera więcej niż jedną wartość MySQL
- 5. SQL Server 2005 - usuwanie wyzwalaczy tabel?
- 6. Usuwanie zduplikowanych rekordów w SQL Server
- 7. Odejmij jeden dzień z datetime
- 8. SQL Server Wyświetlanie elementów w określonej kolejności
- 9. Usuwanie rekordów z tabeli programu SQL Server bez kursora
- 10. Usuwanie (wtórnego) pliku pomocniczego bazy danych SQL Server
- 11. SQL Server wielokrotny LEWY JOIN, jeden do wielu
- 12. Usuwanie wielu węzłach w jednolitym XQuery SQL Server
- 13. Jak dodać dzień na dzień w Linq do SQL
- 14. Usuwanie plików starszych niż 10 dni przy użyciu skryptu powłoki w systemie Unix
- 15. D3: Usuwanie elementów
- 16. Dane z haseł wyłączone przez jeden dzień
- 17. Dodaj jeden dzień do Joda-Time DateTime
- 18. Serwer Sql - rekursywne usuwanie
- 19. Usuwanie pojedynczego znaku z pola varchar SQL Server 2008
- 20. Usuwanie globalnych tabel tymczasowych (## tempTable) w SQL Server
- 21. usuwanie duplikatów z wykorzystaniem partycji przez SQL Server
- 22. Zapytanie SQL - usuwanie duplikatów w przypadku więcej niż 3 duplikatów?
- 23. SQL grupy na dzień, z liczbą
- 24. zapytań SQL Server trwa dłużej niż z parametrem stałym ciągiem
- 25. SQL Server 2005: Indeks większy niż dane przechowywane
- 26. Procedura składowana SQL Server wolniejsza niż proste zapytanie
- 27. Jak wygenerować certyfikat openssl z okresem ważności krótszym niż jeden dzień?
- 28. Usuwanie elementów według nazwy klasy?
- 29. Usuwanie elementów z tablicy Ruby
- 30. R: usuwanie ostatnich elementów wektora
Masz to w tył. W oparciu o to pytanie, "thisColumn" zawsze będzie w przeszłości, a sposób w jaki to napisałeś, twój DATEDIFF zawsze będzie większy niż 0. Poprawny sposób to: "DELETE FROM yourTable WHERE DATEDIFF (day, getdate(), thatColumn) <-1 " Lub:" USUŃ Z TABELI WHERE DATEDIFF (dzień, ta kolumna, getdate())> 1 " –