SQL Make testdata

Make testdata

-- Various samples to create test data.
use pubs
SET NOCOUNT ON
go

-- Method 1.  Simple DEFAULT values on table.
if (isnull(object_id('xyz'),0) ) > 0
	DROP TABLE xyz
go

CREATE TABLE xyz
(
col1    int            PRIMARY KEY IDENTITY(1, 1) NOT NULL,
col2    int            NOT NULL DEFAULT 999,
col3    char(10)       NOT NULL DEFAULT 'ABCEFGHIJK'
)
GO

DECLARE @counter int
SET @counter=1
WHILE (@counter <= 1000)
    BEGIN
    INSERT xyz DEFAULT VALUES
    SET @counter=@counter+1
    END

SELECT 'minimum' = min(col1),
       'maximum' = max(col1),
       'count' = count(*) from xyz
DROP TABLE xyz
go


-- Method 2.   Generate random data in a loop
IF (ISNULL(OBJECT_ID('random_data'), 0)) > 0
    DROP TABLE random_data
GO

CREATE TABLE random_data
(
col1        int PRIMARY KEY,
col2        int,
col3        char(15)
)
GO

DECLARE @counter int, @col2 int, @col3 char(15)
/* Insert 1000 rows of data  */
-- Seed random generator
SELECT @counter=0, @col2=RAND(@@SPID + cpu + physical_io)
FROM master..sysprocesses where spid=@@SPID

WHILE (@counter < 1000)  
    BEGIN
    SELECT @counter=@counter + 10,   -- Sequence numbers by 10
    @col2=
        CASE        -- Random integer between -9999 and +9999
            WHEN CONVERT(int, RAND() * 1000) % 2 = 1 
            THEN (CONVERT(int, RAND() * 100000) % 10000 * -1)
            ELSE CONVERT(int, RAND() * 100000) % 10000
        END,
    @col3=       -- Four random letters followed by a random fill letter
        CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65) -- 65 is 'A'
            + CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65)
            + CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65) 
            + CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65) 
            + REPLICATE(CHAR((CONVERT(int, RAND() * 1000) % 26 )
            + 65), 11)

    INSERT random_data VALUES (@counter, @col2, @col3)
    END
GO


SELECT * FROM random_data
DROP TABLE random_data
go

-- Method 3.   Generate random values for DEFAULT
if (isnull(object_id('random_data'),0) ) > 0
	DROP TABLE random_data
go

CREATE TABLE random_data
(
col1    int      PRIMARY KEY IDENTITY(10,10) NOT NULL,
col2    int      NOT NULL DEFAULT CASE
                 -- Random integer between -9999 and +9999
                 WHEN CONVERT(int, RAND() * 1000) % 2 = 1 
                 THEN (CONVERT(int, RAND() * 100000) % 10000 * -1 )
                 ELSE CONVERT(int, RAND() * 100000) % 10000
                 END,
col3    char(15) NOT NULL DEFAULT
                 CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65)
                 -- 65 is 'A'
                 + CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65)
                 + CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65) 
                 + CHAR((CONVERT(int, RAND() * 1000) % 26 ) + 65) 
                 + REPLICATE(CHAR((CONVERT(int, RAND() * 1000)
                     % 26) + 65), 11)
)
GO

DECLARE @counter int
SET @counter=1
WHILE (@counter <= 1000)
    BEGIN
    INSERT random_data DEFAULT VALUES
    SET @counter=@counter + 1
    END

SELECT 'minimum' = min(col2),
       'maximum' = max(col2),
       'average' = avg(col2) from random_data
SELECT * FROM random_data
go