webForumDet fria alternativet

@@IDENTITY som inte vill fungera

Databaser & SQL

7 svar · 470 visningar · startad av Obbelix

Medlem sedan okt. 2002257 inlägg
Frågan#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

Medlem sedan juni 200032 967 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

Medlem sedan okt. 2002257 inlägg
#3

Så här då eller?

SQL = "UPDATE ddd set bla=(SELECT @@IDENTITY) WHERE id=xxx"
Medlem 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.

Medlem sedan juni 200032 967 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)
Medlem 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?

Medlem sedan juni 200032 967 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

Medlem sedan okt. 2002257 inlägg
#8

OK, då vet jag.
Tack återigen!

264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)