Avatar billede tosse Nybegynder
24. august 2005 - 15:46 Der er 9 kommentarer

Hjælp!! For mange data ved indlæsning

Hej alle!

Kan man på nogen måde sortere i de data man indlæser(daglig opdatering af tabeller), således at kun ændringer fra dagen før bliver læst ind?

Problemet er at det tager en krig at læse dem ind og at det langt fra er alle data der forandre sig fra dag til dag.

MVH. tosse
Avatar billede borrisholt Novice
24. august 2005 - 18:15 #1
tosse>> Hvordan ser din tabel ud ?
Avatar billede tosse Nybegynder
25. august 2005 - 10:48 #2
Hej

Den er stor! med forskellige kategorier og et hav at historiske data i alle formater.
Avatar billede borrisholt Novice
25. august 2005 - 11:03 #3
Må vi se din tabel definition ? Uden den kan jeg ikke hjælpe dig !

Jeg skal se din tabel definition, og den SQL du i dag bruger idag til at hente data ud. ellers kan jeg kuns sige du skal sætte det rigtige filter så virker det !

Jens B
Avatar billede lorentsnv Nybegynder
25. august 2005 - 11:33 #4
Så skal du til at lave delta detection.

Jeg tror den hurtigste måde er at lave en CHECKSUM. DU kan f.eks. lave et nyt felt i dine tabeller, hvor du beregner checksum af hver enkelt række. Denne kolonne skal indekseres. Når du har nye rækker som du skal importere, kan du beregne checksum af rækken først, og checke om du allerede har denne række.
Avatar billede trer Nybegynder
26. august 2005 - 16:38 #5
Prøv at kigge på ROWVERSION (TIMESTAMP) kolonne typen.  Den opdateres til en ny (højere) værdi ved hver UPDATE på en række.

Hvis du i din tabel tilføjer en sådan kolonne, så kommer din algoritme for delta load til at ligne denne

begin transaction
insert into newtable
select * from oldtable
where myrowversion > (select oldrowversion from delta_register)

update delta_register
set oldrowversion = select max(myrowversion) from oldtable
commit

Hvis du vil have opdatering på eksisterende tabller skal du udbygge med sammenligning på primærnøgler for at afgøre om der skal anvendes INSERTs eller UPDATES.  DELETE er lidt mere tricky - men nu har du skabelonen.
Avatar billede borrisholt Novice
27. august 2005 - 08:01 #6
Hvis ikke du har et felt på din tabel om hvornår felterne er lagt i daqtabasen så skal dy have det :

1)
  opdater din tabel med et felt der hedder dato fx, og giv det en Default værdi GetDate(), gøres nede for neden

Dette kan også gøres i SQL :
ALTER TABLE dbo.[TEST] ADD
    Dato datetime NOT NULL CONSTRAINT [DF_TEST_Dato] DEFAULT GetDate()


Her formoder jeg din tabel hedder TEST, men det ændere du bare

2)
  Så nu kan du bare lave en select der filtrerer på dato, således du får dem fra i går :

Select * from [TEST] where convert(int, Dato) =  convert(int, GetDate()) -1

JEns Borrisholt
Avatar billede tosse Nybegynder
29. august 2005 - 09:40 #7
Hej alle,

Tak, for hjælpen. Jeg vil går i gang med det samme !!
Avatar billede borrisholt Novice
29. august 2005 - 11:17 #8
tosse>> du skal lige være opmærksom på at min løsning ikke vil løse problemet før to dage efter den er implementeret.

Jens B
Avatar billede borrisholt Novice
08. september 2005 - 14:42 #9
tosse>>Kom du vidre ?

Jens B
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