Avatar billede janbr Nybegynder
17. november 2008 - 11:37 Der er 9 kommentarer og
2 løsninger

Genoprette talrække - Reindex?

Hej

Jeg har en talrække i en tabel. Det er ikke et index, men bare en gruppe af fortløbende tal.
eks. 1,2,3,4,5,6.

Hvis jeg sletter nr.3 er der så en funktion der kan lukke hullet i rækkefølgen, således det bliver 1,2,3,4,5?

Jeg kan ikke bruge index her og det er vigtigt at der ikke er huller i rækken. Desuden kan en række være mange gange i tabellen så jeg sorterer ud på et andet kriterie.

Jeg er ude efter en funktion ala: MAX eller SUM
Avatar billede teepee Nybegynder
17. november 2008 - 12:55 #1
nej ikke umiddelbart, men du kan lave et hack.
hvis du laver en anden tabel med en komplet talrække kan du lave en select sådan ca.:
select min(tal) from tabAlle
where tal not in (select tal from tabNogle)
Det kommer dog nok til at knibe med performance på sigt.
Avatar billede janbr Nybegynder
17. november 2008 - 13:02 #2
Jeg er bange for at det bliver lidt for omstændigt, da tælrækkerne vil forekomme adskillige gange.
Avatar billede teepee Nybegynder
17. november 2008 - 13:58 #3
Du kan altså godt bruge den samme komplette liste alle steder ;-)
Avatar billede wagner Nybegynder
17. november 2008 - 21:43 #4
Kunne du måske lave en trigger, der aktiveres ved sletning?

Så kan du ved f.eks. sletning af en række med nr 3 lave en update:
update tabelx
set tal = tal -1
where tal > 3

Ideen er naturligvis at finde rækkens nummer i triggeren.
Avatar billede HenrikSjang Nybegynder
18. november 2008 - 06:11 #5
Hvorfor er det at det er vigtigt at der ikke er huller i rækkefølgen? Hvad skal du bruge den talrække til? Og hvilken database server kører du på?
Avatar billede janbr Nybegynder
18. november 2008 - 08:16 #6
Det med triggeren er en god ide. Dog... hvordan finder jeg det nummer der  er slettet?

Det drejer sig om varelinier som skal oplyses til Skat fx. ved import. Der må her ikke være huller i rækkefølge - så fatter de ingenting.

Endelig kan jeg også lave en funktion i min .aspx fil der løser det, men en indbygget funktion i MS sql databasen ville være at foretrække.
Avatar billede teepee Nybegynder
18. november 2008 - 08:59 #7
wagner => det er altså meget usikkert at begynde at tilrettet talrækken. hvis det er en primærnøgle bliver denne måske anvendt som foreign key i andre tabeller. Selvom dette ikke er tilfældet, så smadrer du fuldstændig indexes ved denne lille update af gennemsnitligt halvdelen af alle rækker i tabellen.
Avatar billede janbr Nybegynder
18. november 2008 - 09:50 #8
Jeg har bestemt mig for at lave det med et kald fra min code-behind.
Når der ikke findes en funktion der opdaterer rækken så kan jeg lige så godt lave det her.
Avatar billede janbr Nybegynder
18. november 2008 - 09:52 #9
wagner smid lige et svar så får du og teepee point til deling for et par ok forslag.
Avatar billede wagner Nybegynder
18. november 2008 - 10:41 #10
Behold dem bare selv.

Ja jeg er godtklar det ikke er en god løsning mht. performance, men det afhænger jo lidt af krav og datamængder.

Hvis det er noget til Skat ville jeg nok passe lidt på med at slette io dem. Jeg ville nok undersøge om det kunne undgåes eller måske sætte rækeen til annulleret istedet for at slette dem.

Wagner
Avatar billede janbr Nybegynder
18. november 2008 - 10:52 #11
Det handler om at oprette og sortere data før de sendes til SKAT. Selve funtionalitet i at aflevere data til dem er en kendt affære så det er ikke der jeg vil sætte fokus i denne omgang.
Mit problem var at varelinier skal være fortløbende og nogle gange kan der ske ændringer i indtastede varer som gør at man bliver nødt til at slette en linie.
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