Listing 3: Normalizing/Denormalizing Sudoku Input and Creating and Populating the Nums Auxiliary Table -- BEGIN CALLOUT A SELECT * FROM SudokuInput PIVOT(MAX(val) FOR col IN([1],[2],[3],[4],[5],[6],[7],[8],[9])) AS P; -- END CALLOUT A -- BEGIN CALLOUT B SELECT * FROM SudokuInputD UNPIVOT(val FOR col IN([1],[2],[3],[4],[5],[6],[7],[8],[9])) AS U; -- END CALLOUT B GO IF OBJECT_ID('dbo.Nums') IS NOT NULL DROP TABLE dbo.Nums; GO CREATE TABLE Nums(n INT NOT NULL PRIMARY KEY); DECLARE @max AS INT, @rc AS INT; SET @max = 1000; SET @rc = 1; BEGIN TRAN; INSERT INTO Nums VALUES(1); WHILE @rc * 2 <= @max BEGIN INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums; SET @rc = @rc * 2; END INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max; COMMIT TRAN;