webForumDet fria alternativet

@@IDENTITY som inte vill fungera

7 svar · 468 visningar · startad av Obbelix

ObbelixMedlem sedan okt. 2002257 inlägg
#1

När jag vill få fram senaste inlagda posten har jag tidigare använt "SELECT @@IDENTITY" och det har fungerat perfekt.

Men nu helt plötsligt vill det sig inte och enda skillnaden (som jag kan se) från tidigare gånger jag använt det, är att jag nu har flera inserts innan jag vill ha fram ett id. Spelar det nån roll?
Har även testat med "SCOPE_IDENTITY()" men med samma resultat; "NULL".

Använder MSSQL

Det jag vill är alltså ta fram vilket id posten i tabellen "ccc" fick och uppdatera "bla" i tabellen "ddd" med det värdet.
exempel:

SQL = "INSERT INTO aaa (bla........"
adocon.execute SQL,,128

SQL = "INSERT INTO bbb (bla........"
adocon.execute SQL,,128

SQL = "INSERT INTO ccc (bla........"
adocon.execute SQL,,128

set rs = adocon.execute("SELECT @@IDENTITY")
   SQL = "UPDATE ddd set bla=" & rs(0) & " WHERE id=xxx"
   adocon.execute SQL,,128
rs.close : set rs = nothing

Jag ser inget konstigt i detta, men rs(0) returnerar NULL.

Nån som kan hjälpa till med detta?

Snart är det helg! :birp

@ndersMedlem sedan juni 200032 969 inlägg
#2

Frågan borde returnera ID från ccc, under förutsättning att det är en vanlig räknare, och inget knepigt replikerings-id / guid.

Testa att lägga med @@identity-selectfrågan i samma klump som din sista insert, och plocka ut det direkt.

mvh

ObbelixMedlem sedan okt. 2002257 inlägg
#3

Så här då eller?

SQL = "UPDATE ddd set bla=(SELECT @@IDENTITY) WHERE id=xxx"
ObbelixMedlem sedan okt. 2002257 inlägg
#4

Nej, tyvärr funkade det inte så heller. Får "NULL" som resultat.

/red: Kan ju tillägga att alla inserts ligger i en loop som snurrar allt från 1 till 8 gånger, men det borde väl inte spela någon roll.

@ndersMedlem sedan juni 200032 969 inlägg
#5

Jag menar så här:

SQL = "SET NOCOUNT ON " & vbcrlf & _
       "INSERT INTO ccc (bla........" & vbcrlf & _
       "SELECT @@IDENTITY"
set objRS = adocon.execute(SQL)
ID = objRS(0)
ObbelixMedlem sedan okt. 2002257 inlägg
#6

Se där ja!
Funkar fint :) Tack!
Två följdfrågor...
"SET NOCOUNT ON" betyder vad i denna fråga?
Och vad hade hänt om det inte stod där?

@ndersMedlem sedan juni 200032 969 inlägg
#7

Set nocount on gör att inte SQL Server räknar poster. Hade du inte haft den där hade du fått två recordsets tillbaka, ett tomt (med någon info om "1 row affected" i någon egenskap någonstans), och ett med resultatet av din SELECT. Det tomma recordsetet ligger överst, och du kommer inte direkt åt recordsetet med informationen i.

Man kan dock "byta" till det andra recordsetet med recordsetobjektets metod NextRecordset.

Mvh

ObbelixMedlem sedan okt. 2002257 inlägg
#8

OK, då vet jag.
Tack återigen!

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)