Как создавать случайные данные на SQL-сервере

Я хочу создать хранимую процедуру для вставки случайных данных в таблицу "Видео". Я уже создал 30 000 записей данных для таблицы UserProfile.

Примечание. Имя пользователя - это элемент FK в таблице Video.

CREATE TABLE UserProfile 
(
  Username VARCHAR(45)  NOT NULL  ,
  UserPassword VARCHAR(45)  NOT NULL  ,
  Email VARCHAR(45)  NOT NULL  ,
  FName VARCHAR(45)  NOT NULL  ,
  LName VARCHAR(45)  NOT NULL  ,
  Birthdate DATE   ,
  Genger VARCHAR(10)  NOT NULL  ,
  ZipCode INT    ,
  Image VARCHAR(50)      ,

  PRIMARY KEY(Username)
);
GO

CREATE TABLE Video 
(
  VideoId INT  NOT NULL DEFAULT 1000 ,
  Username VARCHAR(45)  NOT NULL  ,
  VideoName VARCHAR(160)  NOT NULL  ,
  UploadTime DATE    ,
  TotalViews INT    ,
  Thumbnail VARCHAR(100)      ,

  PRIMARY KEY(VideoId),
  FOREIGN KEY(Username)
    REFERENCES UserProfile(Username)
);
GO

Ответ 1

Не сложно создавать случайные данные, даже в SQL

Например, чтобы получить случайное имя пользователя из вашей таблицы userprofile.

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

Чтобы создать случайное целое число...

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

Чтобы создать случайную строку varchar

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

И, наконец, случайная дата

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

Ответ 2

Как уже сказал Аарон в своем комментарии - я бы не стал изобретать колесо.

Просто пойдите и найдите некоторые из уже доступных инструментов для этого.

Вот статья о том, как это сделать в VS и потоке здесь, в StackOverflow.

Генераторы данных для SQL-сервера?

Ответ 3

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)
end