Avatar billede pedalkurwa Nybegynder
19. maj 2008 - 15:42 Der er 5 kommentarer og
1 løsning

SQL get max ID

Hej

Vi har brug for at få hentet loginId fra en tabel ind i en anden tabel sammen med en masse andet, og mener at en SQLiSQL-løsning er den rette måde at gøre det på. se eks:

--
strSQL1 = "INSERT INTO medlemTabel (navn, adresse, postNr, byen, tlf, fax, eMAil, web, login ) values('";
strSQL1 += tbNavn.Text + "','";
strSQL1 += tbAdresse.Text + "','";
<<osv osv>>
strSQL1 += "(SELECT MAX(loginId) FROM loginTabel)" + "')";
--

den nederste select max's værdi skal så indsættes i kolonnen login i medlemTabel, men i alt vores rod med paranteser og gåseøjne er der vist gået noget galt... eller er vi bare helt forkert på den med vores SQL?

en lille smule hjælp ville ihvertfald være dejligt!
.
Avatar billede w13 Novice
19. maj 2008 - 15:48 #1
Der er noget rod i det ja. F.eks. skal denne:
strSQL1 += "(SELECT MAX(loginId) FROM loginTabel)" + "')";
nok ikke slutte på " + "')"; men bare på )";
Dvs.:
strSQL1 += "(SELECT MAX(loginId) FROM loginTabel))";
Avatar billede w13 Novice
19. maj 2008 - 15:49 #2
Men muligvis er der også noget galt lige inden denne del, der, hvor du skriver "<<osv osv>>"
Avatar billede pidgeot Nybegynder
19. maj 2008 - 15:49 #3
Den rette måde at gøre det på er at bruge databasens funktioner til at hente det senest auto-genererede ID. Den nøjagtige SQL afhænger af hvilken database I bruger - eks. er det SELECT LAST_INSERT_ID() på MySQL, mens MSSQL bruger SELECT SCOPE_IDENTITY() eller SELECT @@IDENTITY (de to til MSSQL virker ikke helt på samme måde, men forskellen er til jeres formål sandsynligvis uinteressant) .

Desuden bør I bruge parameters, i stedet for at indsætte tekst direkte I jeres SQL - på den måde sikrer I jer mod SQL injection, og slipper af den grund også for at escape (en ting der er og bliver en nødløsning).
Avatar billede pedalkurwa Nybegynder
20. maj 2008 - 09:39 #4
Vi har prøvet denne "(SELECT MAX(loginId) FROM loginTabel))"; fra W13, men uden held....
Avatar billede pedalkurwa Nybegynder
20. maj 2008 - 15:45 #5
Problem er løst--: "SELECT (loginId) FROM [loginTabel] WHERE (loginId)=(SELECT MAX(loginId) FROM loginTabel)";
Avatar billede arne_v Ekspert
20. maj 2008 - 15:58 #6
Hvis problemet var at komme op med en god kandidat til aarets daarligste SQL
saetning, saa er det problemet loest.

Den SQL saetning er baade unoedig kompleks og ikke flerbruger sikker (se pidgeot's
indlaeg for hvordan det boer laves).
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