TSQL Challenge 22 - Performance Testing Data



The following script generates the data required for the performance testing of TSQL Challenge 22.

/*************************************************************
 --------------------------------------------------------------
 Performance Testing Data for TSQL Challenge 22
 Copyright © beyondrelational.com
 -------------------------------------------------------------- 
 
 Notes:
 
 Revision History:
 Rev 00 - 03 June 2010 - Muhammad Al Pasha - Initial Release     
*************************************************************/


-- --------------------------------------------------
-- Create the 'Boxes' table
-- --------------------------------------------------
IF OBJECT_ID('TC22_Boxes','U') IS NOT NULL 
BEGIN
	DROP TABLE TC22_Boxes
END
GO

CREATE TABLE TC22_Boxes
(
    BoxId INT IDENTITY PRIMARY KEY,
    BoxName VARCHAR(20)
)
GO
-- --------------------------------------------------
-- Create the 'Balls' table
-- --------------------------------------------------
IF OBJECT_ID('TC22_Balls','U') IS NOT NULL 
BEGIN
	DROP TABLE TC22_Balls
END
GO

CREATE TABLE TC22_Balls(
    BallId INT IDENTITY PRIMARY KEY,
    BallName VARCHAR(20)
)
GO 
      
-- --------------------------------------------------
-- Create the 'Preferences' table
-- --------------------------------------------------
IF OBJECT_ID('TC22_Preferences','U') IS NOT NULL 
BEGIN
	DROP TABLE TC22_Preferences
END
GO

CREATE TABLE TC22_Preferences(
    PreferenceId INT IDENTITY PRIMARY KEY,
    BoxId INT,
    BallId INT
)
GO

DECLARE @boxes_and_balls_number INT 
SET @boxes_and_balls_number = 10000;
DECLARE @max_offset INT 
SET  @max_offset = 99;

INSERT INTO TC22_Boxes(BoxName)
SELECT 'Box ' + CAST(N AS VARCHAR(7))
FROM tsqlc_Tally
WHERE N >= 1
AND N <= @boxes_and_balls_number;

INSERT INTO TC22_Balls(BallName)
SELECT 'Ball ' + CAST(N AS VARCHAR(7))
FROM tsqlc_Tally
WHERE N >= 1
AND N <= @boxes_and_balls_number;

INSERT INTO TC22_Preferences(BoxID, BallID)
SELECT 1 AS BoxID, 1 AS BallID
UNION ALL
SELECT Bo.BoxId, Ba.BallId + 1
FROM TC22_Boxes AS Bo
INNER JOIN TC22_Balls AS Ba ON Ba.BallId <= Bo.BoxId + @max_offset
WHERE Ba.BallId % Bo.BoxId = Bo.BoxId - 1
AND  BallID + 1 <= @boxes_and_balls_number 
ORDER BY BoxID