IDENTITY Vs SEQUENCE Object in SQL Server

Introduction
 
SQL Server 2012 comes with many features, one of which is SEQUENCE. SEQUENCE works similarly to the IDENTITY property. There are many differences between these two. This article describes the differences between the IDENTITY property and a SEQUENCE object.
 
Identity Vs Sequence

Identity Sequence
The Identity property of a column is available from SQL Server 2000. Sequence object available from SQL Server 2012.

Identity is a table level object, in other words it is dependent on the table.

This property is set or used with the CREATE TABLE and ALTER TABLE statements

Sequence is a database-level object so it is independent of tables.

A Sequence object allows us to synchronize a seed value across the multiple tables

Cannot be controled by application code. Can be controled by application code.
We cannot restart the Identity counter after the specified interval.

Using the CYCLE property, we can restart the counter after a specific interval.

Example

ALTER SEQUENCE TableNextId
INCREMENT BY 1
 MINVALUE 1000
 MAXVALUE 100000
 CYCLE

We cannot cache the identity column.

Using the “CACHE” property we can cache a sequence and improve the performance of SQL Server.

Example

ALTER SEQUENCE TableNextId
CACHE 10

Here we set the cache size to 10. it means the first  10 values (from 1 to 10) made available from memory and the last cached value (10) is written into the system table.

We cannot define the maximum value for an Identity column. It is dependent on the data type for the identity column.

Using the MAXVALUE property we can define a maximum value for the sequence.

Example

ALTER SEQUENCE TableNextId
MAXVALUE  100000

We can reseed an Identity property but we cannot change the step size. We can alter the seed well as the Step size of a Sequence object any time.
We cannot generate a range for an identity column. Using the "sp_sequence_get_range" Stored Procedure, we can generate a range of sequence numbers from the sequence object.
If any column is marked as an Identity then we cannot insert data within this column directly. We must first turn off the Identity of the column. A Sequence does not depend on the table so we can insert any value in the column.
We cannot Get the value of an Identity column before inserting a record.

We can Get the value of the next Sequence number for a Sequence Object before inserting a record.

SELECT NEXT VALUE FOR DBO.TableNextId

We cannot create an Identity property in descending order.

We can create a Sequence number in descending order using a sequence object.

Example

CREATE SEQUENCE [dbo].[TableNextId]
AS [int]
START WITH 10000
INCREMENT BY -1
MINVALUE 1000
MAXVALUE 10000
CYCLE

Conclusion

Using a Sequence Object we can generate a sequence number and this Sequence can be shared with multiple tables. It is similar to IDENTITY but has a greater scope. According to the requirements, we can select an Identity or Sequence object.


Similar Articles