The sample code below is a quick run down of the new sequence object introduced in SQL Server 2012.
USE [tsql2012];
-- SEQUENCE
-- using default where does this one start?
--DROP SEQUENCE myTestSequence;
CREATE SEQUENCE myTestSequence;
select NEXT VALUE FOR myTestSequence;
-- using int... where does this one start?
--DROP SEQUENCE myTestSequence2;
CREATE SEQUENCE myTestSequence2
AS INT;
select NEXT VALUE FOR myTestSequence2;
-- using smallint
--DROP SEQUENCE myTestSequence3;
CREATE SEQUENCE myTestSequence3
AS SMALLINT;
select NEXT VALUE FOR myTestSequence3;
-- using tinyint... where does this one start?
--DROP SEQUENCE myTestSequence4;
CREATE SEQUENCE myTestSequence4
AS TINYINT;
select NEXT VALUE FOR myTestSequence4;
-- start it at 0
-- DROP SEQUENCE myTestSequence5;
CREATE SEQUENCE myTestSequence5
START WITH 0;
select NEXT VALUE FOR myTestSequence5;
DROP SEQUENCE ordersKeySequence;
CREATE SEQUENCE ordersKeySequence
AS bigint
START WITH 100
INCREMENT BY 1 ;
-- Create a table
--DROP TABLE Orders;
CREATE TABLE Orders
(OrderID int PRIMARY KEY,
Name varchar(20) NOT NULL,
Qty int NOT NULL);
GO
-- Insert three records
INSERT Orders (OrderID, Name, Qty)
VALUES (NEXT VALUE FOR ordersKeySequence, 'Hat', 2) ;
INSERT Orders (OrderID, Name, Qty)
VALUES (NEXT VALUE FOR ordersKeySequence, 'Shirt', 1) ;
INSERT Orders (OrderID, Name, Qty)
VALUES (NEXT VALUE FOR ordersKeySequence, 'Shoes', 1) ;
GO
-- View the table
SELECT * FROM Orders ;
GO
-- Another way to do it.
DECLARE @NextID int ;
SET @NextID = NEXT VALUE FOR ordersKeySequence;
INSERT Orders (OrderID, Name, Qty)
VALUES (@NextID, 'Belt', 2) ;
GO
SELECT * FROM Orders ;
GO
-- the easy way
DROP TABLE Orders;
CREATE TABLE Orders
(OrderID int PRIMARY KEY DEFAULT NEXT VALUE FOR ordersKeySequence,
Name varchar(20) NOT NULL,
Qty int NOT NULL);
GO
-- Insert three records
INSERT Orders (Name, Qty) VALUES ('Hat', 2) ;
INSERT Orders (Name, Qty) VALUES ('Shirt', 1) ;
INSERT Orders (Name, Qty) VALUES ('Shoes', 1) ;
GO
-- View the table
SELECT * FROM Orders ;
GO
-- TRANSACTIONS
-- DROP SEQUENCE myTestSequence6;
CREATE SEQUENCE myTestSequence6
START WITH 0;
select NEXT VALUE FOR myTestSequence6;
BEGIN TRANSACTION;
select NEXT VALUE FOR myTestSequence6;
COMMIT TRANSACTION;
select NEXT VALUE FOR myTestSequence6;
-- now what happens if we roll it back??
select NEXT VALUE FOR myTestSequence6;
BEGIN TRANSACTION;
select NEXT VALUE FOR myTestSequence6;
ROLLBACK TRANSACTION;
select NEXT VALUE FOR myTestSequence6;
USE tsql2012;
CREATE SEQUENCE withOverSequence
AS bigint
START WITH 100
INCREMENT BY 1 ;
-- SEQUENCEs with the OVER clause
SELECT NEXT VALUE FOR withOverSequence OVER(ORDER BY year),
*
FROM REVENUE
ORDER BY departmentID, year;
-- RESETTING A SEQUENCE
SELECT NEXT VALUE FOR withOverSequence ;
ALTER SEQUENCE withOverSequence
RESTART WITH 1 ;
SELECT NEXT VALUE FOR withOverSequence ;
USE [tsql2012];
-- SEQUENCE
-- generating letters with a sequence.
DROP SEQUENCE lettersSequence;
CREATE SEQUENCE lettersSequence
AS tinyint
--START WITH 65
MINVALUE 65
MAXVALUE 90
CYCLE
INCREMENT BY 1 ;
SELECT NEXT VALUE FOR lettersSequence;
--DROP SEQUENCE numberSequence;
CREATE SEQUENCE numbersSequence
AS INT
START WITH 0;
select NEXT VALUE FOR numbersSequence;
DROP TABLE Students;
CREATE TABLE Students
(UserID varchar(30) PRIMARY KEY DEFAULT char(NEXT VALUE FOR lettersSequence)
+ CAST(NEXT VALUE FOR numbersSequence as VARCHAR),
Name varchar(20) NOT NULL);
GO
-- Insert three records
set nocount on;
INSERT Students (Name) VALUES ('Some Name');
GO 1000
SELECT *
FROM STUDENTS
ORDER BY UserID;
Just part of my Whats New in TSQL 2012 presentation at SQL Saturday 166.
More from Stedman Solutions:
Steve and the team at Stedman Solutions are here for all your SQL Server needs.
Contact us today for your free 30 minute consultation..
We are ready to help!