SCOPE_IDENTITY() e
@@IDENTITY sono due istruzioni
T-SQL che permettono di recuperare l'ultimo valore di
identity generato dopo una
INSERT.
La differenza tra i due è che
@@IDENTITY ritorna l'ultimo valore di identity inserito
relativo alla connessione corrente. Questo vuol dire che, ad esempio, se ho un
trigger sulla tabella il valore di identity ritornato non sarà quello della tabella dove ho eseguito la insert ma quello relativo all'ultima istruzione di
insert presente nel trigger.
SCOPE_IDENTITY() invece ritorna l'ultimo valore di identity nello
scope corrente, quindi eventuali
insert presenti in un un trigger non vengono presi in considerazione.
Salvo rari casi, conviene sempre usare
SCOPE_IDENTITY():
DECLARE @Tbl TABLE (
[ID] int IDENTITY(1,1),
[Description] nvarchar(50)
);
DECLARE @NEWID int;
INSERT INTO @Tbl Values('Milano');
INSERT INTO @Tbl Values('Roma');
-- SET @NEWID = @@IDENTITY;
SET @NEWID = SCOPE_IDENTITY();
SELECT *
FROM @Tbl
ORDER BY [ID];
SELECT @NEWID; --- ritorna 2