Avatar billede -sofus- Nybegynder
23. februar 2004 - 15:16 Der er 9 kommentarer og
6 løsninger

find den næste id med asp

Jeg sidder og koder noget ASP med MS SQL.

En del af koden, er at den skal bruge unik id, for den post man er ved at lave.

pt. laver jeg "select top 1 * from tabel order by id" + 1 men hvis den seneste post er slettet så kan den ikke finde den rigtige id.
Avatar billede slash Nybegynder
23. februar 2004 - 15:22 #1
@@identity
Avatar billede slash Nybegynder
23. februar 2004 - 15:23 #2
set nocount on
insert into bla. bla. bla
select id = @@identity
set nocount off
Avatar billede slash Nybegynder
23. februar 2004 - 15:24 #3
hvis det da er det du efterspørger! eller hvad eftersprøge du helt specifikt?
Avatar billede -sofus- Nybegynder
23. februar 2004 - 15:33 #4
Jeg skal bruge det til et link system med tæller.

når jeg tilføjer et nyt link, skal jeg i linket bruge det id som linket får.
Avatar billede arne_v Ekspert
23. februar 2004 - 15:38 #5
@@identity er løsningen

største værdi + 1 er ikke sikker i multi-user kontekst
Avatar billede trer Nybegynder
23. februar 2004 - 15:45 #6
@@identity giver den sidste identity værdi der er brugt i databasen - ikke nødvendigvis på aktuelle tabel og ikke nødvendigvis i aktuelle session.

@@scope_identity giver den sidste identity værdi brugt i aktuelle session - men ikke på en bestemt tabel.

jeg vil mene at du ikke bør benytte en identity kolonne her - brug i stedet funktionen NEWID() og få en GUID (global unique identifier). GUID'en er garenteret unik så du vil ikke få problemer mht flere samtidige brugere.
Avatar billede -sofus- Nybegynder
23. februar 2004 - 15:54 #7
Kender ikke lige funktion, men "SELECT Newid(linkid) from tabel" virker ikke
Avatar billede trer Nybegynder
23. februar 2004 - 16:03 #8
nixen, du skal blot kalde den som SELECT NEWID() - du kan se i Books Online hvordan den anvendes.
Avatar billede -sofus- Nybegynder
23. februar 2004 - 16:11 #9
links til book online ?
Avatar billede slash Nybegynder
23. februar 2004 - 16:24 #10
du kan også bare bruge IDENT_CURRENT('DIN TABEL') - det giver identity fra specificeret tabel.....
Avatar billede arne_v Ekspert
23. februar 2004 - 16:31 #11
trer>

Forkert. @@IDENTITY er også per session.  Forskellen på @@IDENTITY
og @@SCOPE_IDENTITY kommer hvis man laver en INSERT som aktiverer en
TRIGGER som også laver en INSERT. Men du har ret i at at det næsten
altid er @@SCOPE_IDENTITY man vil have. @@SCOPE_IDENTIFY kræver
SQLServer 2000 (6.5 og 7.0 har den ikke).
Avatar billede trer Nybegynder
23. februar 2004 - 21:07 #12
arne_v> Du har ret - jeg huskede forkert.

sofus> Books Online er installeret sammen med Enterprise Manager og Query Analyzer. Ellers kan du downloade den fra www.microsoft.com/sql
Avatar billede arne_v Ekspert
23. februar 2004 - 21:11 #13
Avatar billede ccbruno Nybegynder
26. februar 2004 - 18:14 #14
Hvis ikke du vil bruge newid skal du bruge @@identity i en stored procedure der returnerer værdien til dig.
Hvis der er samtidighedsproblemer er det en god idé at lave det hele i en transaktion

a la
begin trans
insert ...
select @nyid = @@identity
commit trans
Avatar billede arne_v Ekspert
26. februar 2004 - 22:03 #15
Man kan sagtens lave SELECT @@IDENTITY i en seperat statement uden at bruge
stored procedure.
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