Velmi často se setkávám se zaměňováním „funkcí“ @@IDENTITY a SCOPE_IDENTITY(). Obě dvě dvě představují hodnotu identity-sloupce posledního INSERTu, nicméně každý trochu jinak definovanou a v určitých případech se mohou jejich výsledky lišit.
Definice
@@IDENTITY představuje poslední vloženou identity hodnotu v kontextu celé session, veškeré její aktivity.
SCOPE_IDENTITY() představuje poslední vloženou identity hodnotu v kontextu aktuálního scope, v nejužším slova smyslu.
Příklad
Mějme tabulku Table1 s identity-column a k ní insert trigger, který vkládá hodnotu do druhé tabulky Table2 opět s identity-column. A tady je rozdíl, pokud zavoláme dávku
INSERT INTO Table1 DEFAULT VALUES SELECT @@IDENTITY -- vrátí identity hodnotu Table2 z triggeru SELECT SCOPE_IDENTITY() -- vrátí identity hodnotu Table1
…s použitím @@IDENTITY si můžeme pěkně naběhnout.
IDENT_CURRENT(‚table‘)
Funkce IDENT_CURRENT(‚tablename‘) vrací poslední hodnotu identity-column tabulky, nezávisle na session či scope.