Avatar billede nielsen2002 Nybegynder
08. marts 2007 - 10:01 Der er 12 kommentarer og
1 løsning

Find Højeste ID i SQL

Hej Eksperten,

Jeg sider og roder lidt med at system der skal importerer en masse vare fra en XML filer til en SQL database.

Når jeg indsætte dataen i mit System skal der automatisk genereres et id som ser sådan ud 'IDxx'  hvor xx er tal der automatisk skal forhøjes med en for hver linie jeg smider ind.
Altså en kombination af bogstaver og tal.

Men hvordan gør jeg det bedst, når jeg skal tænke performance ind i det?

Jeg har tidligere brugt en funktion der looper gennem alle ID'er  i databasen og for hver enkelt checker om den er større end den tidligere og hvis den var smed jeg den i en variabel. men det kan umuligt være det smarteste når der kommer rigtig mange poster i databasen.


Nogen der har en løsning på det problem?
Avatar billede kalp Novice
08. marts 2007 - 10:03 #1
altså den simple er

Select max(idkolonne) from dintabel;
Avatar billede kalp Novice
08. marts 2007 - 10:03 #2
hvilken db er det? mssql?
Avatar billede nielsen2002 Nybegynder
08. marts 2007 - 10:21 #3
Det er en SQL server 2005,

men Select Max(ID) returnerer ikke det korrekte id,
fordi mit ID ikke er numerisk.

Selv om højeste id f.eks er ID3422 returnerer SELECT max(id) ID 1.
Avatar billede kalp Novice
08. marts 2007 - 10:22 #4
er din ID kolonne en GUID? altså unique identifier?
Avatar billede kalp Novice
08. marts 2007 - 10:25 #5
prøv

SELECT @@IDENTITY AS 'NyesteID';

eller

SELECT IDENT_CURRENT('dubTabek') as 'NyesteID';
Avatar billede nielsen2002 Nybegynder
08. marts 2007 - 10:27 #6
Altså mit ID er bare en NVARCHAR(30) og den skal være Unik.
Avatar billede x-guy Nybegynder
08. marts 2007 - 11:57 #7
Hvis vil tænke performance ind i det, så skulle du nok lave dit ID til et INT.
Så kan du også  bruge autonummering, og så undgår du alt det bøvl med at skulle til at finde det højeste ID. For det er nemlig ikke særligt godt preformance-mæssigt.

Hvis det er fordi at du gerne vil fremvise dine ID'er til brugere som "IDxx" så kan du jo bare hæfte "ID"-delen på i brugerfladen.

Ellers prøv og forklar hvorfor du vil have at der skal stå "IDxx" i databasen.
Avatar billede kalp Novice
08. marts 2007 - 13:10 #8
nielsen2002.. prøv denne sql så. Bare erstat "DINKOLONNE" begge steder til navnet på din idkolonne og ret "Dintabel" til din tabels navn.

SELECT MAX(CAST(SUBSTRING(DINKOLONNE, 3, DATALENGTH(DINKOLONNE)) AS int) FROM DINTABEL;
Avatar billede kalp Novice
08. marts 2007 - 13:13 #9
ops.. den her (lidt fejl i paranteser)

SELECT MAX(CAST(SUBSTRING(DINKOLONNE, 3, DATALENGTH(DINKOLONNE)) AS int)) FROM DINTABEL;
Avatar billede nielsen2002 Nybegynder
12. marts 2007 - 13:44 #10
x-guy: Jeg kan ikke ændre ID'et til INT, da det ikke er et system jeg har udviklet, jeg skal blot importerer, Men ja hvis jeg bare kunne så var problemet løst.

gawi: Jeg har prøvet dit eksempel, og det virker fint.

Og det må uden tvivl være bedre end at loope database igen for at finde det højeste id.
Avatar billede kalp Novice
12. marts 2007 - 13:55 #11
Det er det også!!

Er imponeret over det virker:P
Ikke at det ikke burde, men det altid rart at ramme plet;o)

jeg lægger et svar:)
Avatar billede nielsen2002 Nybegynder
12. marts 2007 - 14:39 #12
Det er kanont.  Tak for hjælper, jeg kan allerede mærke, selv med de begrænsede test data jeg roder med, at det her er flere gange hurtigere.
Avatar billede kalp Novice
12. marts 2007 - 14:47 #13
ingen årsag:) glad for at det kunne bruges:-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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