IDENTITY
Esta é uma dúvida comum entre desenvolvedores
Esta é uma dúvida comum entre desenvolvedores.
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.
Subscribe ecode10.com
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.
Log In
Related articles
SELECT Format Date Time for many countries
It is a good tip to use day by day
Creating a SiteMap using SQL Database
Como indexar melhor meu site e links?
Transformando linhas em colunas usando SQL Server
veja como funciona