Labels

Saturday, December 31, 2011

Remaping keys with sequential update

CREATE TABLE Product(
  ProductID int identity(1,1) PRIMARY KEY, -- Clustered Unique Index created
  ProductName nvarchar(64) not null UNIQUE, -- Non-Clustered Unique Index created
  ModifiedDate date default(getdate()));
 
CREATE TABLE ProductPhoto (
  ProductPhotoID int identity(1,1) PRIMARY KEY, -- Clustered Unique Index created
  ProductID int REFERENCES Product(ProductID),
  LargePhoto varbinary(max),
  ModifiedDate date default(getdate()));

USE tempdb;

SELECT *
INTO   SODetail
FROM   AdventureWorks2008.Sales.SalesOrderDetail
GO

-- (121317 row(s) affected)


SELECT   TOP 100 *
FROM     SODetail
ORDER BY SalesOrderID,
         SalesOrderDetailID


;
WITH cteDistinctSO
     AS (SELECT DISTINCT SalesOrderID
         FROM   SODetail)
SELECT   [SequentialID] = Identity(INT,1,1),
         SalesOrderID
INTO     #SequentialMapping
FROM     cteDistinctSO
ORDER BY SalesOrderID ASC
GO
--(31465 row(s) affected) 
SELECT   TOP 10 *
FROM     #SequentialMapping
ORDER BY SalesOrderID
GO

-- SQL Server sequential update
UPDATE s
SET    s.SalesOrderID = m.[SequentialID]
FROM   SODetail s
       INNER JOIN #SequentialMapping m
         ON s.SalesOrderID = m.SalesOrderID 
GO
               
SELECT   TOP 100 *
FROM     SODetail
ORDER BY SalesOrderID,
         SalesOrderDetailID

DROP TABLE tempdb.dbo.SODetail
DROP TABLE #SequentialMapping
GO

No comments:

Post a Comment