Toon posts:

[MSSQL] Query voor verwijderen oude data

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik gebruik voor een klant een table (in MSSQL2000) waarin ik tijdelijk data opsla. Nu willen we het maximale aantal records beperken en daarvoor moet ik een query zien te bouwen waarmee ik dit kan doen (die ik in een jobje kan gebruiken). De volgende query kan dit in principe:

DELETE FROM tbl_Pallet
WHERE PAlletID NOT IN
(SELECT TOP 1000 PalletID
FROM tbl_Pallet
ORDER BY CreationDate)

In de bovenstaande subquery maak ik dus een selectie van de te bewaren data, en vervolgens verwijder ik dus alles wat daar niet in zit. Maar voor mijn gevoel gaat dit niet snel werken, zeker als we het aantal te bewaren verhogen naar 10000. Dus is er een beter alternatief om het bovenstaande voor elkaar te krijgen?

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:57

Dido

heforshe

Je zou het resultaat van die Top select in een tijdelijk tabel kunnen gooien, je oude tabel in zijn geheel leegggooien, en de tijdleijk tabel inserten in je oorspronkelijk tabel?

Wat betekent mijn avatar?


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Hoe snel werkt het nu dan?

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-05 09:43

Jaspertje

Max & Milo.. lief

Zou je niet alles kunnen verwijderen wat ouder is dan createdate x

  • lier
  • Registratie: Januari 2004
  • Laatst online: 23:07

lier

MikroTik nerd

Jaspertje schreef op dinsdag 22 maart 2005 @ 11:49:
Zou je niet alles kunnen verwijderen wat ouder is dan createdate x
Inderdaad, waarom een vast aantal en niet op basis van de datum verwijderen ?
Misschien kan je de bedoeling hiervan uitleggen ?
En is een fysieke verwijdering noodzakelijk ?
En bewaar je nog ergens de "verwijderde" data ?

Eerst het probleem, dan de oplossing


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Jaspertje schreef op dinsdag 22 maart 2005 @ 11:49:
Zou je niet alles kunnen verwijderen wat ouder is dan createdate x
Of iest met datediff doen zodat je dingen verwijderd waarvan de datediff met GETDATE() voldoet aan een bepaalde lengte.

stp - PSN ID: stp_4


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:40
Als het echt tijdelijke data is, waarom wil je er dan altijd nog een paar (1000) van bijhouden ?

https://fgheysels.github.io/


  • lier
  • Registratie: Januari 2004
  • Laatst online: 23:07

lier

MikroTik nerd

Ik heb nogmaals je vraag gelezen en heb nu een beter idee van wat je wilt...

Een betere, snellere en nettere oplossing is om een insert trigger te maken, die elke keer (indien meer dan 1000 records in de tabel staaan) als een insert gedaan wordt, het oudste record (obv datum) verwijdert.

Eerst het probleem, dan de oplossing


Verwijderd

Topicstarter
Wat een reacties, bedankt!

Even wat achtergrondinformatie: de tabel bevat data die principe allemaal in een ander systeem te gebruiken is, alleen als er geen connectie is met dat systeem zal ik deze tabel gebruiken. Alleen met datediff is helaas geen optie omdat er nog een paar voorwaarden zijn die ik even uit de query had gelaten voor de duidelijkheid..

Maar na het lezen van de reacties ga ik denk ik maar eens kijken of dat maximale aantal records zo belangrijk is, en anders kan die trigger inderdaad ook een mooi alternatief zijn.
Pagina: 1