The below three built-in
functions can be used to get the identity of the mostly added record.
@IDENTITY
It
returns the last identity value generated for any table in the current session,
across all scopes.
Let
me explain this... suppose we create an insert trigger on table which inserts a row in
another table with generate an identity column, then @@IDENTITY returns
that identity record which is created by trigger.
SCOPE_IDENTITY
It
returns the last identity value generated for any table in the current session
and the current scope.
Let
me explain this... suppose we create an insert trigger on table which inserts a
row in another table with generate an identity column, then SCOPE_IDENTITY result is not affected but if a trigger or a user defined
function is affected on the same table that produced the value returns that
identity record then SCOPE_IDENTITY returns that identity record which is created
by trigger or a user defined function.
IDENT_CURRENT
It
returns the last identity value generated for a specific table in any session
and any scope.
In
other words, we can say it is not affected by scope and session, it only
depends on a particular table and returns that table related identity value
which is generated in any session or scope.
Example:
Using the below query I will explain the difference between this
three
CREATE TABLE Table1(id int IDENTITY);
CREATE TABLE Table2(id int IDENTITY(100,1));
GO
CREATE TRIGGER Table1ins ON Table1 FOR INSERT
AS
BEGIN
INSERT Table2 DEFAULT VALUES
END;
GO
--End of trigger definition
SELECT id FROM Table1;
--id is empty.
SELECT id FROM Table2;
--ID is empty.
--Do the following in Session 1
INSERT Table1 DEFAULT VALUES;
SELECT @@IDENTITY;
/*Returns the value 100. This
was inserted by the trigger.*/
SELECT SCOPE_IDENTITY();
/* Returns the value 1. This
was inserted by the
INSERT statement two statements
before this query.*/
SELECT IDENT_CURRENT('Table2');
/* Returns value inserted into Table2,
that is in the trigger.*/
SELECT IDENT_CURRENT('Table1');
/* Returns value inserted into Table1.
This was the INSERT statement
four statements before this query.*/
-- Do the following in Session
2.
SELECT @@IDENTITY;
/* Returns NULL because there
has been no INSERT action
up to this point in this
session.*/
SELECT SCOPE_IDENTITY();
/* Returns NULL because there
has been no INSERT action
up to this point in this scope
in this session.*/
SELECT IDENT_CURRENT('Table2');
/* Returns the last value
inserted into Table2.*/
Comments
Post a Comment