This time I decided to write about Identity column as I see this issue coming again and again in various forums and blogs.
These are the principles:
When you create a table with the identity property, it does not have any values assigned to it.
USE tempdb;
CREATE TABLE t1 (id int IDENTITY(1,1) )
GO
Now we'll check each identity related command and see the results. SELECT IDENT_CURRENT('t1'), SCOPE_IDENTITY(), @@IDENTITY
IDENT_CURRENT function will return the seed value. This will return null under one condition: The table does not have any column with identity property (or table does not exist).
As there is no statement in this batch has inserted value into this table, both SCOPE_IDENTITY and @@IDENTITY return null.
Now Let us insert a row into t1
INSERT INTO t1 DEFAULT VALUES
SELECT IDENT_CURRENT('t1'), SCOPE_IDENTITY(), @@IDENTITY
Once the first row is inserted, the current identity value will be set to 1.
As the statement in the query inserts a row to t1, scope_identity returns 1. Also, as that is the last row to be inserted, @@Identity too will return 1
Now we'll do another experiment.
DROP TABLE t1
GO
SELECT IDENT_CURRENT('t1'), SCOPE_IDENTITY(), @@IDENTITY
Are tou receiving values different from what you expected?
- Ident_Current gives null
- Both Scope_Identity and @@Identity return a new value:1
Scope_Identity returns a value even though the table does not have any values. Even if the table is not recreated, scope_identity returns the same value it returned when the table was existed.
@@Identity will return the last identity value inserted within the session. This is not tied to a table. Currently even though we do not have any table with the identity column, @@Identity will return a value it got within the session.
These values will again reset to null when the session is closed.
I'll continue on Identity on future blogs as well.
No comments:
Post a Comment