Matan L - 1 year ago 86
SQL Question

# Replace identity column from int to bigint

I am using SQL Server 2008, and I have a table that contains about 50 mill rows.

That table contains a primary identity column of type

int
.

I want to upgrade that column to be
bigint
.

I need to know how to do that in a quick way that will not make my DB server unavailable,
and will not delete or ruin any of my data

How should I best do it ? what are the consequences of doing that?

Well, it won't be a quick'n'easy way to do this, really....

My approach would be this:

1. create a new table with identical structure - except for the ID column being BIGINT IDENTITY instead of INT IDENTITY

----[ put your server into exclusive single-user mode here; user cannot use your server from this point on ]----

2. find and disable all foreign key constraints referencing your table

3. turn SET IDENTITY_INSERT (your new table) ON

4. insert the rows from your old table into the new table

5. turn SET IDENTITY_INSERT (your new table) OFF

8. update all table that have a FK reference to your table to use BIGINT instead of INT (that should be doable with a simple ALTER TABLE ..... ALTER COLUMN FKID BIGINT)