How to generate random data in SQL server

It's not too difficult to generate random data, even in SQL

For example, to get a random username from your userprofile table.

BEGIN
-- get a random row from a table
DECLARE @username VARCHAR(50)
SELECT @username = [Username] FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY [Username]) [row], [Username]
    FROM [UserProfile]
) t 
WHERE t.row = 1 + (SELECT CAST(RAND() * COUNT(*) as INT) FROM [UserProfile])

print(@username)
END

To generate a random integer...

BEGIN
-- get a random integer between 3 and 7 (3 + 5 - 1)
DECLARE @totalviews INT
SELECT @totalviews = CAST(RAND() * 5 + 3 as INT)
print(@totalviews)
END

To generate a random varchar string

BEGIN
-- get a random varchar ascii char 32 to 128
DECLARE @videoname VARCHAR(160)
DECLARE @length INT
SELECT @videoname = ''
SET @length = CAST(RAND() * 160 as INT)
WHILE @length <> 0
    BEGIN
    SELECT @videoname = @videoname + CHAR(CAST(RAND() * 96 + 32 as INT))
    SET @length = @length - 1
    END
print(@videoname)
END

And finally, a random date

BEGIN
-- get a random datetime +/- 365 days
DECLARE @uploadtime DATETIME
SET @uploadtime = GETDATE() + (365 * 2 * RAND() - 365)
print(@uploadtime)
END

As Aaron already suggested in his comment – I wouldn’t really reinvent the wheel.

Just go and find some of the already available tools for this.

Here is an article on how to do this in VS and thread here on StackOverflow.

Data generators for SQL server?


    declare @i int
    set @i = 0 
    while (@i < 7)


    Begin

    BEGIN
    -- get a random row from a table
    DECLARE @username VARCHAR(50)
    DECLARE @length INT
    SELECT @username = ''
    SET @length = CAST(RAND() * 50 as INT)
    WHILE @length <> 0
        BEGIN
        SELECT @username = @username + CHAR(CAST(RAND() * 96 + 32 as INT))
        SET @length = @length - 1
        END
    END


    BEGIN
    -- get a random integer between 3 and 7 (3 + 5 - 1)
    DECLARE @totalviews INT
    SELECT @totalviews = CAST(RAND() * 5 + 3 as INT)
    print(@totalviews)
    END

    BEGIN
    -- get a random varchar ascii char 32 to 128
    DECLARE @videoname VARCHAR(160)

    SELECT @videoname = ''
    SET @length = CAST(RAND() * 160 as INT)
    WHILE @length <> 0
        BEGIN
        SELECT @videoname = @videoname + CHAR(CAST(RAND() * 96 + 32 as INT))
        SET @length = @length - 1
        END
    END

    BEGIN
    -- get a random datetime +/- 365 days
    DECLARE @uploadtime DATETIME
    SET @uploadtime = GETDATE() + (365 * 2 * RAND() - 365)
    END

    insert into table_1 values(@videoname, @username, @totalviews, @length, @uploadtime)
    SET @i = @i + 1
    end