Sql Server Sequence Generated Primary Key On Multiple Columns

Sql Server Sequence Generated Primary Key On Multiple Columns Average ratng: 3,5/5 2940 votes

Aug 15, 2018 In SQL Server, both the SEQUENCE object and IDENTITY property are used to generate a sequence of numeric values in an ascending order. However, there are several differences between the IDENTITY property and SEQUENCE object. Feb 16, 2015 Assume that you create a sequence object that has the CACHE option enabled in Microsoft SQL Server 2012 or SQL Server 2014. When the instance is under memory pressure, and multiple concurrent connections request sequence values from the same sequence object, duplicate sequence values may be generated.

Summary: in this tutorial, you will learn about the SQL Server Sequence objects to generate a sequence of numeric values based on a specified specification.

Surrogate keys are keys that have no “business” meaning and are solely used to identify a record in the table. Such keys are either database generated (example: Identity in SQL Server, Sequence in Oracle, Sequence/Identity in DB2 UDB etc.) or system generated values (like generated via a table in the schema). I am currently undertaking a review of the primary keys in a SQL Server 2000 database with a view to improving performance of queries. I have heard that, in the case of compound primary keys, it is important to select the correct order for the columns within the key. For instance, imagine a table called OrderLine which has primary key. Apr 24, 2007 For example, assigning each new Customer added to your table a unique 'CustomerNumber'. There are effectively two ways to do using the built-in features that T-SQL provides: Identity Columns - An identity is a common 'auto generated' primary key to use in a SQL Server database these days. An identity is simply an integer value that 'auto.

What is a sequence

A sequence is simply a list of numbers, in which their orders are important. For example, the {1,2,3} is a sequence while the {3,2,1} is an entirely different sequence.

In SQL Server, a sequence is a user-defined schema-bound object that generates a sequence of numbers according to a specified specification. A sequence of numeric values can be in ascending or descending order at a defined interval and may cycle if requested.

SQL Server CREATE SEQUENCE statement

To create a new sequence object, you use the CREATE SEQUENCE statement as follows:

Let’s examine the syntax in detail:

sequence_name

Specify a name for the sequence which is uniquely in the current database.

AS integer_type

Use any valid integer type for the sequence e.g., TINYINT, SMALLINT, INT, BIGINT, or DECIMAL and NUMERIC with a scale of 0. By default, the sequence object uses BIGINT.

START WITH start_value

Specify the first value that the sequence returns. The start_value must be between the range (min_value, max_value).

The start_value defaults to the min_value in an ascending sequence and max_value in a descending sequence.

Sql Server Sequence Generated Primary Key On Multiple Columns In Excel

INCREMENT BY increment_value

Specify the increment_value of the sequence object when you call the NEXT VALUE FOR function.

If increment_value is negative, the sequence object is descending; otherwise, the sequence object is ascending. Note that the increment_value cannot be zero.

[ MINVALUE min_value NO MINVALUE ]

Specify the lower bound for the sequence object. It defaults to the minimum value of the data type of the sequence object i.e., zero for TINYINT and a negative number for all other data types.

[ MAXVALUE max_value NO MAXVALUE]

Specify the upper bound for the sequence object. It defaults to the maximum value of the data type of the sequence object.

[ CYCLE NO CYCLE ]

Use CYCLE if you want the value of the sequence object to restart from the min_value for the ascending sequence object, or max_value for the descending sequence object or throw an exception when its min_value or max_value is exceeded. SQL Server uses NO CYCLE by default for new sequence objects.

[ CACHE cache_size ] NO CACHE ]

Specify the number of values to cache to improve the performance of the sequence by minimizing the number of disk I/O required to generate sequence numbers. By default, SQL Server uses NO CACHE for new sequence objects.

SQL Server Sequence examples

Let’s take some examples of creating sequences.

A) Creating a simple sequence example

The following statement uses the CREATE SEQUENCE statement to create a new sequence named item_counter with the type of integer (INT), which starts from 10 and increments by 10:

You can view the sequence object under in the Programmability > Sequences as shown in the following picture:

The following statement returns the current value of the item_counter sequence:

Here is the output:

In this example, the NEXT VALUE FOR function generates a sequence number from the item_counter sequence object.

Each time you execute the following statement again, you will see that the value of the item_counter will be incremented by 10:

This time the output is:

B) Using a sequence object in a single table example

First, create a new schema named procurement:

Next, create a new table named orders:

Then, create a new sequence object named order_number that starts with 1 and is incremented by 1:

After that, insert three rows into the procurement.purchase_orders table and uses values generated by the procurement.order_number sequence:

Finally, view the content of the procurement.purchase_orders table:

Here is the output:

C) Using a sequence object in multiple tables example

First, create a new sequence object:

Second, create procurement.goods_receipts and procurement.invoice_receipts tables:

Note that both tables have the receipt_id whose values are derived from the procurement.receipt_no sequence.

Third, insert some rows into both tables without supplying the values for the receipt_id columns:

Fourth, query data from both tables:

Here is the output:

Sequence vs. Identity columns

Sequences, different from the identity columns, are not associated with a table. The relationship between the sequence and the table is controlled by applications. In addition, a sequence can be shared across multiple tables.

The following table illustrates the main differences between sequences and identity columns:

When to use sequences

You use a sequence object instead of an identity column in the following cases:

  • The application requires a number before inserting values into the table.
  • The application requires sharing a sequence of numbers across multiple tables or multiple columns within the same table.
  • The application requires to restart the number when a specified value is reached.
  • The application requires multiple numbers to be assigned at the same time. Note that you can call the stored procedure sp_sequence_get_range to retrieve several numbers in a sequence at once.
  • The application needs to change the specification of the sequence like maximum value.

Getting sequences information

You use the view sys.sequences to get the detailed information of sequences.

In this tutorial, you have learned about the SQL Server sequences to generate a sequence of numbers by a specified specification.

SQL PRIMARY KEY Constraint

The PRIMARY KEY constraint uniquely identifies each record in a table.

Sql Primary Key Two Columns

Primary keys must contain UNIQUE values, and cannot contain NULL values.

A table can have only ONE primary key; and in the table, this primary key can consist of single or multiple columns (fields).

SQL PRIMARY KEY on CREATE TABLE

The following SQL creates a PRIMARY KEY on the 'ID' column when the 'Persons' table is created:

MySQL:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);

/stalker-call-of-pripyat-key-generator.html. To allow naming of a PRIMARY KEY constraint, and for defining a PRIMARY KEY constraint on multiple columns, use the following SQL syntax:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);

Note: In the example above there is only ONE PRIMARY KEY (PK_Person). However, the VALUE of the primary key is made up of TWO COLUMNS (ID + LastName).

SQL PRIMARY KEY on ALTER TABLE

To create a PRIMARY KEY constraint on the 'ID' column when the table is already created, use the following SQL:

MySQL / SQL Server / Oracle / MS Access:

To allow naming of a PRIMARY KEY constraint, and for defining a PRIMARY KEY constraint on multiple columns, use the following SQL syntax:

MySQL / SQL Server / Oracle / MS Access:

Server
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

Note: If you use the ALTER TABLE statement to add a primary key, the primary key column(s) must already have been declared to not contain NULL values (when the table was first created).

DROP a PRIMARY KEY Constraint

Sql Server Multiple Primary Key

To drop a PRIMARY KEY constraint, use the following SQL:

MySQL:

SQL Server / Oracle / MS Access: