Trovo ancora molte perplessità riguardo all'utilizzo delle funzioni T-SQL citate nel  titolo...Quasi tutti conoscono la prima, alcuni anche la seconda, ma non capiscono bene cosa differisca dalla prima (e quindi essendo piu semplice la prima vanno con quella :P), quasi nessuno conosce la terza....

Quindi, vediamo di fare un pò chiarezza con il loro utilizzo:

@@IDENTITY
http://msdn2.microsoft.com/en-us/library/aa933167(SQL.80).aspx

Restituisce l'ltimo ID autogenerato all'interno  di una certa sessione, ma non è limitato dallo scope. Quindi restituisce l'ultimo ID autogenerato dalla sessione anche se è stato generato da un qualcosa (trigger/function) esterna per esempio alla stored procedure attuale. Quindi potremmo fare un insert su una tabella che ha un  trigger su un'altra tabella, ed avere indietro l'ID di questa seconda tabella!

Questa funzione restituisce NULL se non sono state generate identity,  e restituisce l'ultima se ne sono state generate piu di una.

SCOPE_IDENTITY
http://msdn2.microsoft.com/en-us/library/Aa259185(SQL.80).aspx

Simile alla @@Identity, ma limitata allo scope corrente. Questo vuol dire che se sono all'interno di una stored/funzione/batch e genero un identity, qualsiasi altro identity generato da qualcosa (funzioni, trigger) _esterne_ allo scope attuale verrà ignorato.

Per il resto, si comporta esattamente come @@Identity

IDENT_CURRENT
http://msdn2.microsoft.com/en-us/library/Aa933217(SQL.80).aspx

Il fratellino bistrattato delle prime due, invece, non lo conosce nessuno...
Questa funzione restituisce l'ultimo identity generato all'interno di una particolare tabella, indipendentemente dallo Scope e dalla sessione corrente.

L'uttilizzo è IDENT_CURRENT('tablename'), e bisogna stare attenti ad utilizzarlo perchè, visto che non è limitato all'interno della sessione, potrebbe succedere che se io inserisco qualcosa in una tabella, poi faccio qualche operazione, e quindi utilizzo IDENT_CURRENT per prendere l'identity generato... potrei ritrovarmi l'identity derivante dall'inserimento di un'altra stored procedure :)