Click here to Skip to main content
Licence CPOL
First Posted 22 Aug 2010
Views 15,055
Downloads 80
Bookmarked 22 times

Difference between @@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT

By Samrat Banerjee | 22 Aug 2010
SQL
Difference between SQL @@IDENTITY, SCOPE_IDENTITY, IDENT_CURRENT functions
 
Part of The SQL Zone sponsored by
See Also
1 vote, 7.7%
1

2
1 vote, 7.7%
3
4 votes, 30.8%
4
7 votes, 53.8%
5
4.33/5 - 13 votes
1 removed
μ 4.00, σa 2.13 [?]

Introduction

In most of our application scenario, we need to get latest inserted row information through SQL query. And for that, we have multiple options like:

  • @@IDENTITY
  • SCOPE_IDENTITY
  • IDENT_CURRENT

All three functions return last-generated identity values. However, the scope and session on which last is defined in each of these functions differ.

Compare

@@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.

SQL Query

I am explaining the above process with the help of some sample query, hope it helps:

CREATE TABLE Parent(id int IDENTITY);

CREATE TABLE Child(id int IDENTITY(100,1));

GO

CREATE TRIGGER Parentins ON Parent FOR INSERT

AS

BEGIN

   INSERT Child DEFAULT VALUES

END;

GO

--End of trigger definition

SELECT id FROM Parent;
--id is empty.

SELECT id FROM Child;
--ID is empty. 

--Do the following in Session 1
INSERT Parent 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('Child');

/* Returns value inserted into Child, that is in the trigger.*/

SELECT IDENT_CURRENT('Parent');

/* Returns value inserted into Parent. 
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('Child');

/* Returns the last value inserted into Child.*/

History

  • 22nd August, 2010: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Samrat Banerjee

Software Developer (Senior)
Viscus Infotech Ltd. [India]
India India

Member
Hi, I am Samrat Banerjee from India.
I am a Software Engineer working in .net platform.
I love to explore new technologies.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 1 Pinmemberpinaldave12:06 24 Aug '10  
GeneralMy vote of 3 PinmemberBishoy Ghaly0:10 24 Aug '10  
GeneralVery Good PinmemberAkhteruzzaman5:19 23 Aug '10  
GeneralMy vote of 5 Pinmemberlinuxjr3:49 23 Aug '10  
GeneralMy vote of 5 PinmemberMember 55065823:30 22 Aug '10  
GeneralMy vote of 5 PinmemberRahulKhadikar19:58 22 Aug '10  
GeneralMore of a blog post PinsupporterMark Nischalke13:03 21 Aug '10  
GeneralRe: More of a blog post Pinmemberkornakar23:12 22 Aug '10  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120209.1 | Last Updated 22 Aug 2010
Article Copyright 2010 by Samrat Banerjee
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid