Avatar billede langthjem Nybegynder
16. marts 2007 - 11:28 Der er 11 kommentarer og
1 løsning

Last_insert_ID() i ASP

Hej alle kloge hoveder,

jeg har brug for at få sidste ID fra en tabel hvor jeg laver en INSERT. Jeg bruger MySql, og jeg har testet følgende query i MySql-Front, hvor det virker. Hvorfor får jeg ikke noget ud i ASP? Jeg får heller ingen fejl.

INSERT INTO tbltext (Content) VALUES('Test');SELECT LAST_INSERT_ID()

Min auto-increment kolonne hedder 'ID'.

Jeg ved godt at det let kan gøres med to queries, men jeg synes det vil være langt bedre at nøjes med én.
Avatar billede -mundi- Nybegynder
16. marts 2007 - 11:31 #1
SELECT @@identity
Avatar billede -mundi- Nybegynder
16. marts 2007 - 11:31 #2
hov, jeg troede du brugte en MS database, se bort fra mit svar
Avatar billede madeindk Nybegynder
16. marts 2007 - 12:12 #3
strSQL = "SELECT MAX(ID) as maxID FROM dinTabel "
Set rs = connection.execute(strSQL)

Response.Write rs("maxID")
Avatar billede madeindk Nybegynder
16. marts 2007 - 12:13 #4
Du kan ikke gøre det uden 2 queryer, mener jeg. fordi du sætter ingen rs og den skal du bruge, for at kunne forespørge på den.
Avatar billede The Real Yoda Juniormester
16. marts 2007 - 15:36 #5
hva med :
INSERT INTO tbltext (Content) VALUES('Test')

Select id,content from tbltext where content='Test' order by id desc limit 1

Så indsætter den en, og henter den senest indsatte..
Avatar billede madeindk Nybegynder
18. marts 2007 - 20:47 #6
Det samme gør man ved at bruge MAX :-)

langthjem > Hvilken løsning har du brugt?
Avatar billede The Real Yoda Juniormester
19. marts 2007 - 16:17 #7
madeindk .. din tager jo så ikke højde for at der kan være to inserts.. eks to brugere der opretter noget næsten samtidig ... men ellers.. så ja :)
Avatar billede langthjem Nybegynder
19. marts 2007 - 19:00 #8
Har selv løst den.

Løsningen er blevet til:

Conn.Execute("INSERT INTO tbltext (Content) VALUES('Test')")
Set rs = Conn.Execute("SELECT LAST_INSERT_ID()")
iLastInsertID = rs(0)

Har læst mig frem til at LAST_INSERT_ID() er connection specifik. Altså kan jeg regne med at den indeholder AUTO_INCREMENT feltet for det der netop er sat ind fra denne forbindelse.

Det virker åbenbart bare ikke med flere SQL kald i én statement i ASP.

Lukker, men tak for de gode kommentarer.
Avatar billede krogstrup Nybegynder
19. marts 2007 - 21:07 #9
sql = "set nocount on; INSERT INTO tbltext (Content) VALUES('Test'); SELECT LAST_INSERT_ID() as newId"
Set rs = Conn.Execute(sql)
iLastInsertID = rs("newId")
Avatar billede krogstrup Nybegynder
19. marts 2007 - 21:07 #10
så kan du nøjes med een sql statement :-)
Avatar billede langthjem Nybegynder
20. marts 2007 - 10:13 #11
Er det "SET NOCOUNT ON;" der gør tricket???
Avatar billede krogstrup Nybegynder
20. marts 2007 - 11:11 #12
"set nocount on" skulle (så vidt jeg har forstået) betyde at sql sætninger der kun returnerer recordsets med en status for udførelsen, ikke returneres. Dvs. at sql´en  med en INSERT ikke resulterer i at der sendes et recordset tilbage da denne kun ville indeholde en status for udførelsen af INSERT´en. Men derimod returneres der et recordset for sql´en med SELECT.

Med andre ord: Uden "set nocount on" ville der blive returneret 2 recordssets i stedet for som nu kun een.
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