Avatar billede cult Nybegynder
04. november 2006 - 17:37 Der er 11 kommentarer og
1 løsning

Hente ID fra INSERT i database

Hej alle...

Jeg forsøger at lave 2 Inserts til to tabeller samtidigt, hvor anden Insert skal have et ID fra den første, da de "hænger sammen".

Men hvordan fanger jeg hvilket ID den første Insert får tildelt automatisk af databasen ?
Avatar billede arne_v Ekspert
04. november 2006 - 17:51 #1
afhænger af databasen

@@IDENTITY i Access/SQLServer
LAST_INSERT_ID() i MySQL
SCOPE_IDENTITY() i SQLServer
Avatar billede cult Nybegynder
04. november 2006 - 19:57 #2
Det er MySQL.

Hvordan bruger jeg LAST_INSERT_ID() ? I ASP eller SQL ?
Avatar billede cult Nybegynder
04. november 2006 - 20:12 #3
Jeg har fået det til at virke, det var lige det jeg skulle bruge :)

Smid et svar så du kan få points!
Avatar billede arne_v Ekspert
04. november 2006 - 20:57 #4
ok
Avatar billede cpufan Juniormester
05. november 2006 - 13:38 #5
arne vil den altid tage id fra samme session, eller er der risiko for at den tager
en nyere hvis der er flere samtidige brugere?
Avatar billede cult Nybegynder
05. november 2006 - 14:09 #6
Ja, det er faktisk et godt spørgsmål... SQL sætningen er:
"SELECT LAST_INSERT_ID() AS PID"

... altså er det ikke en del af INSERT, men en seperat SELECT, så der er vel fare for at den kan vælge noget en anden bruger har tastet ind?
Avatar billede arne_v Ekspert
05. november 2006 - 15:35 #7
LAST_INSERT_ID() er per connection d.v.s. ingen problemer med andre brugere
Avatar billede arne_v Ekspert
05. november 2006 - 15:37 #8
iøvrigt behøver du sikkert ikke:

SELECT LAST_INSERT_ID() AS PID

men kan nøjes med noget a la følgende:

INSERT INTO t1(f1,f2) VALUES (123,'ABC')

og

INSERT INTO t2 (f3,f4) VALUES(LAST_INSERT_ID(), 'bla bla bla')
Avatar billede cpufan Juniormester
05. november 2006 - 16:04 #9
ok tak for det
Avatar billede bondester Nybegynder
06. november 2006 - 07:27 #10
Bare lige som en ekstra kommentar så er det muligt at den får hentet et forkert ID ud...
Det er i hvert fald sket for mig (men der var også mange besøgende)

En løsningsmulihged er at genererer et unikt_ID, smide det ind sammen med den første INSERT, og så SELECT det og udskrive PRIMARY ID.

Du får lige en funktion jeg har lavet, som du måske kan bruge:
    Function getPassword(intLength)
        If intLength < 0 Then intLength = 8
        Dim strSymboler, i, strPass, intRnd
        strTegn = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

    For i = 1 To intLength
    Randomize
        intRnd = CInt(Rnd() * (Len(strTegn)-1)) + 1
        strPass = strPass & Mid(strTegn, intRnd, 1)
    Next
   
    getPassword = strPass
   
    End Function
Avatar billede arne_v Ekspert
06. november 2006 - 13:20 #11
last_insert_id() er per connection

altid
Avatar billede cult Nybegynder
06. november 2006 - 17:41 #12
Kanon, det er jo en god ting at være sikker på.

Endnu engang tak, Arne :)
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
Kurser inden for grundlæggende programmering

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