Avatar billede s0mmer Nybegynder
22. april 2009 - 15:03 Der er 10 kommentarer

Slette rækker

Hej eksperter,

Jeg har en tabel som indeholder knap 3 millioner rækker. Det er loggin fra 2006 til og med idag. Jeg ønsker nu at slette alt ældre end en bestemt dato. Jeg kører med Microsoft SQL Server Management Studio Express 2005. Jeg kan ikk umiddelbart finde ud af sortere ved at klikke på kollonnerne, og hvis jeg prøver at køre en sql kommando via en web side får jeg bare timeout. Hvordna gøres dette nemmest?
Avatar billede 2c Nybegynder
22. april 2009 - 15:43 #1
Du kan teste med en select først.

Select * from table where dato < '01.01.2007'

Hvis du får vidst det du gerne vil slette, så erstat select * med DELETE således:

DELETE  from table where dato < '01.01.2007'
Avatar billede 2c Nybegynder
22. april 2009 - 15:44 #2
Og du kan sortere dem i din manegement studio ved at skrive order by i din select. Således.

Select * from table where dato < '01.01.2007'
Order by Dato DESC
Avatar billede Syska Mester
22. april 2009 - 15:44 #3
DELETE FROM table1 WHERE Added < '2009-04-01'

Altså 1 April 2009

Du kan sikre dig ved at prøve:
SELECT COUNT(*) FROM table1 WHERE Added < '2009-04-01'

mvh
Avatar billede jensriis Novice
22. april 2009 - 17:04 #4
Husk at sikre dig at din database logfile kan gro.
Når du slette mange data kan den vokse temmelig meget.
Avatar billede s0mmer Nybegynder
23. april 2009 - 09:52 #5
Hvis jeg gør sådan her:
SELECT  *
FROM        Counter
WHERE    (CONVERT(varchar, Date1, 101) < '31-12-2007')


Jeg converter fordi dato feltet er en datetime.. så får jeg rækker returneret med bl.a. 05-06-2008.. hvorfor?
Avatar billede s0mmer Nybegynder
23. april 2009 - 10:39 #6
.. rettere sagt, alle rækker kommer frem med min kode.
Avatar billede Syska Mester
23. april 2009 - 11:07 #7
argh :-s

Hvis dit felt i databasen allerede er DateTime skal du ikke convert det ...

Det virker med alle overstående eksempler og den prøver selv at caste din string til en valid DateTime, hvis den ikke kan det får du en error.

dvs igen
SELECT * FROM Counter WHERE Date1 < '2009-04-01'
Der kan så være lidt rod alt efter hvad dine regional settings er sat til.

ellers:

declare @dato Date = '2009-04-01';
print @dato;

Så kan du ihvert fald se hvad den tolker din dato som.
Avatar billede s0mmer Nybegynder
23. april 2009 - 15:23 #8
buzzzz > det hjalp mig videre.. når jeg kører select linjen får jeg de rigtige rækker ud, men så snart jeg så kører delete får jeg en fejl omkring timeout.. Det er 1mil rækker den skal slette. Burde den ik kunne gøre det?
Avatar billede 2c Nybegynder
23. april 2009 - 15:51 #9
Ellers prøv at tage det i små skridt:

DELETE FROM Counter WHERE Date1 < '2001-04-01'
DELETE FROM Counter WHERE Date1 < '2002-04-01'
DELETE FROM Counter WHERE Date1 < '2003-04-01'

osv
Avatar billede Syska Mester
23. april 2009 - 21:41 #10
kunne ikke siges bedre ...

Hvor kører du din delete fra ?

synes at SSMS plejer at have et mega højts timeout ... og med mindre du har en meget langsom server burde det ik' give problemer.

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udlændinge- og Integrationsministeriet

Forretningsudvikler med fokus på digitalisering og AI

Udviklings- og Forenklingsstyrelsen

Generalister til PMO og strategiimplementering

Politiets Efterretningstjeneste

Bliv AD-specialist hos PET

Udviklings- og Forenklingsstyrelsen

Testmanager til Partsrepræsentation