TSQL -> Record Numerator with ROW_NUMBER() OR Identity(1,1)

Suppose that we have table with column that serves as record numerator, but need to be rebuild. We will examine two ways to create copy of original table and renumerate records during the copy operation.

USE [colombo]
GO

-- create sample data

IF EXISTS (SELECT * FROM sys.objects
  WHERE object_id = OBJECT_ID (N'[dbo].[myItems]') AND type in (N'U'))
DROP TABLE [dbo].[myItems]
GO

CREATE TABLE [dbo].[myItems](
  [item_id] INT IDENTITY(1,1) NOT NULL,
  [ItemName] Varchar (50) NULL,
) ON [PRIMARY]
GO

INSERT INTO myItems (ItemName)
VALUES ('item1'),('item2'),('item3'),('item4');

DELETE FROM myItems WHERE item_id=2;

-- see existing data
SELECT * FROM myItems;


Returned results will be like this:
item_idItemName
1item1
3item3
4item4


-- [1] Create New table with IDENTITY column

IF EXISTS (SELECT * FROM sys.objects
  WHERE object_id = OBJECT_ID (N'[dbo].[myItems_new]') AND type in (N'U'))
DROP TABLE [dbo].[myItems_new]
GO

CREATE TABLE [dbo].[myItems_new](
  [item_id] INT IDENTITY(1,1) NOT NULL,
  [ItemName] Varchar (50) NULL,
) ON [PRIMARY]
GO

INSERT INTO dbo.myItems_new (ItemName)
SELECT ItemName
FROM dbo.myItems
ORDER BY ItemName
GO

-- [2] select with ROW_NUMBER() saved to new table

IF EXISTS (SELECT * FROM sys.objects
  WHERE object_id = OBJECT_ID (N'[dbo].[myItems_new]') AND type in (N'U'))
DROP TABLE [dbo].[myItems_new]
GO

SELECT ROW_NUMBER() OVER (ORDER BY ItemName) AS item_id, ItemName
   INTO myItems_new
FROM dbo.myItems
ORDER BY ItemName
GO

-- drop source table and rename newlly created

IF EXISTS (SELECT * FROM sys.objects
  WHERE object_id = OBJECT_ID (N'[dbo].[myItems]') AND type in (N'U'))
DROP TABLE [dbo].[myItems]
GO

EXEC sp_rename 'myItems_new', 'myItems'
GO

-- see results
SELECT * FROM myItems;


Returned results will be like this:
item_idItemName
1item1
2item3
3item4



sqlexamples.info