Just got a question on my A first look at sequences in SQL Server Denali post.

The question is the following: How can you add a new column to existing table (already populated) and make it a sequence column?

Let’s take a look. First create this very simple table

T-SQL
1
2
3
4
5
6
CREATE TABLE bla (id INT)
INSERT BLA VALUES(1)
INSERT BLA VALUES(2)
INSERT BLA VALUES(3)
INSERT BLA VALUES(4)
INSERT BLA VALUES(5)
CREATE TABLE bla (id INT)
INSERT BLA VALUES(1)
INSERT BLA VALUES(2)
INSERT BLA VALUES(3)
INSERT BLA VALUES(4)
INSERT BLA VALUES(5)

What you want to do is have the sequence start at 6, here is how to do that.

T-SQL
1
2
3
4
5
6
CREATE SEQUENCE GlobalCounter
    AS INT
    MINVALUE 1
    NO MAXVALUE
    START WITH 6;
GO
CREATE SEQUENCE GlobalCounter
    AS INT
    MINVALUE 1
    NO MAXVALUE
    START WITH 6;
GO

Use START WITH to indicate that the sequence should start at 6

The next step is to add a default to the column, this default would use the sequence

T-SQL
1
2
3
ALTER TABLE bla
ADD CONSTRAINT id_default_sequence
DEFAULT NEXT VALUE FOR GlobalCounter FOR ID;
ALTER TABLE bla
ADD CONSTRAINT id_default_sequence
DEFAULT NEXT VALUE FOR GlobalCounter FOR ID;

Now if we do an insert, followed by a select

T-SQL
1
2
3
INSERT bla DEFAULT VALUES
 
SELECT * FROM Bla
INSERT bla DEFAULT VALUES

SELECT * FROM Bla

Here are the results

id
1
2
3
4
5
6

As you can see the value 6 was inserted

There you have it, a simple way to change a column to a sequence column