Just nu i M3-nätverket
Jump to content

Id på senaste inlagda posten


Mr Orange

Recommended Posts

Det finns tydligen en "global variabel", select @@identity, som gör att man kan hämta id på senaste inlagda posten.

 

Finns det fler liknande användbara "globala variabler"?

 

Link to comment
Share on other sites

Kolla i books online.

 

Vælj index och skriv in @@ så ser du alla "global variabler". Det finns bland annat @@Error om du har fått ett fel @@Rowcount, @@Trancount osv osv...

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Link to comment
Share on other sites

Magnus Ahlkvist

När det gäller @@identity så är det bättre att använda funktionen SCOPE_IDENTITY eftersom den returnerar senaste insertade identity i samma "scope" som funktionen utförs. @@identity är inte begränsad av "scope". SCOPE_IDENTITY finns i SQL2000.

 

Tänk på att både @@IDENTITY och SCOPE_IDENTITY påverkas av triggers som gör insert i tabeller.

 

 

--

En röst talade till mig och sade:

"Le och var glad, ty det kunde vara värre".

Så jag log, och jag var glad.

Och det blev värre.

 

Link to comment
Share on other sites

Så har inte jag førstått det.

 

SCOPE_IDENTITY skall inte påverkas av Triggers på den tabell som man gør inserten på. Alltså æven om det ligger en trigger dær som skapar ny rader så skall inte det ID returneras utan det på din førsta tabell.

 

SCOPE_IDENTITY and @@IDENTITY will return last identity values generated in any table in the current session. However, SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope.

 

For example, you have two tables, T1 and T2, and an INSERT trigger defined on T1. When a row is inserted to T1, the trigger fires and inserts a row in T2. This scenario illustrates two scopes: the insert on T1, and the insert on T2 as a result of the trigger.

 

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and SCOPE_IDENTITY will return different values at the end of an INSERT statement on T1.

 

@@IDENTITY will return the last IDENTITY column value inserted across any scope in the current session, which is the value inserted in T2.

 

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which was the last INSERT that occurred in the same scope. The SCOPE_IDENTITY() function will return the NULL value if the function is invoked before any insert statements into an identity column occur in the scope.

 

Har jag missuppfattat dig eller texten?

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Link to comment
Share on other sites

Magnus Ahlkvist

Fel av mig (börjar bli lite ofta nu *S*).

 

Det var så att jag satt och svor över att vi INTE har SQL2000 på jobbet på en server där jag behövde få reda på senaste insertade ID i en tabell som hade en trigger som i sin tur gör insert i en annan tabell med en identity-kolumn. SCOPE_IDENTITY hade alltså varit kungen i det läget, eftersom den mycket riktigt inte bryr sig om triggers.

 

 

--

En röst talade till mig och sade:

"Le och var glad, ty det kunde vara värre".

Så jag log, och jag var glad.

Och det blev värre.

 

Link to comment
Share on other sites

Okej...

 

Du brukar ju vet vad du snackar om, så bäst att kolla så jag inte hade fattat allt fel. Det har (tror det eller ej) hänt någon enstaka gång.. :)

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...