23. juli 2002 - 13:51Der er
8 kommentarer og 1 løsning
returnere ID'et ved Insert
Hvårdan er det nu hvis man f.eks har en tabel med 2 coloner ID som er autonumerisk nøglefelt og gruppe som er almindeligt text felt. Og nu tilføjer jeg ny gruppe og samtidig får at vide hvilket id jeg fik tildelt
Enten bruger du såkalte "triggers" eller gør du sådan her:
sql ="SET NOCOUNT ON;INSERT INTO dintabel (gruppe) VALUES ('gruppenavn_variabel');SELECT @@IDENTITY AS NewID;" set newRs = Conn.execute(sql) if not rs = eof then Dit_nye_id = rs(0) end if
"Set Nocount" kvæler output fra den normale insert statement. @@IDENTITY returnerere den fornyeligt indsatta ID. Og det sker ved en såkaldt Atomar handling. Dvs intet kan forstyrrer det returnerede ID.
Hvis du bare vælger det højeste id, kan du jo god risikere at der er kommet 10 nye ID'er ind, inden din select stament bliver udført!
Grunden til at jeg gør sådan her: Dit_nye_id = rs(0) og ikke Dit_nye_id = rs("NewID") er at hvis tabellen indeholder en Trigger i forvejen, vil du IKKE får returneret noget. (Jo hvis din trigger returnerede id AS NewId). Men så er du sikker.
Hvis din tabel indeholder en trigger, vil det være den du får tilbage, men du vil så ikke mærke forskel, på om det er din SQL med NOCOUNT eller Trigger'en der returnere dit ID.
Der er bare et lille men med @@identity .. Den bliver opdateret langsommere end insert .. dvs. indsættes flere kan @@identity returnere forkert id...... Just a notice ;)
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.