Em muitas situações, você deseja saber o código que acabou de inserir.
Para isso precisamos saber o IDENTITY, mas qual deles? Existem 3 opções.

SCOPE_IDENTITY() - Retorna o último ID inserido dentro daquele escopo(Procedure, Função, etc).
Recomendo sempre utilizar este.

IDENT_CURRENT('nomedatabela') - Retorna o último ID inserido em uma determinada tabela, independente de conexão, escopo, etc.
Muito Cuidado com esta, pois você pode pegar o ID de outro insert.

@@IDENTITY - Retorna o último ID inserido na conexão atual, independente de tabela.
Evite usar este, a chance de ter problema é enorme.


Vamos aos testes.

Criação do Ambiente:
CREATE TABLE Cliente
(
     CodCliente int identity(1,1) primary key,
     Nome varchar(50)
)
GO
 
CREATE TABLE Registro
(
     CodReg int identity(1,1) primary key,
     Nome varchar(50),
     Data datetime default getdate()
)
GO
 
INSERT INTO Registro(Nome) values('Teste1'),('Teste2')
GO
 
CREATE TRIGGER  tg_Cliente ON Cliente
For Insert
AS
    INSERT INTO Registro(Nome)
    SELECT Nome FROM inserted
GO


Verifique o cenário atual:
SELECT from Cliente
SELECT from Registro



 --Como não tem nenhum registro na tabela Cliente, deve retornar Código 1
INSERT INTO Cliente(Nome) VALUES ('José')
SELECT Scope_Identity() as CódigoCliente

--O último registro inserido foi 1, então ele deve retornar o Código 2
INSERT INTO Cliente(Nome) VALUES ('João')
SELECT Ident_Current('Cliente'as CódigoCliente

--O último registro inserido foi 2, então ele deveria retornar o Código 3, porém ele pega o Código 5(da tabela Registro), que foi inserido pela trigger, pois está na mesma conexão.
INSERT INTO Cliente(Nome) VALUES ('Manuel')
SELECT @@IDENTITY as Código



Muito cuidado ao utilizar estes comandos, analisem bem a situação.


Ozimar Henrique
http://ozimar.com/