Question Comment générer des données aléatoires dans le serveur SQL


Je veux créer une procédure stockée pour insérer des données aléatoires dans la table 'Video'. J'ai déjà généré 30 000 données d'enregistrement pour la table UserProfile.

Remarque: Le nom d'utilisateur est l'élément FK dans la table vidéo.

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

15
2017-07-31 17:48


origine


Réponses:


Il n'est pas trop difficile de générer des données aléatoires, même en SQL

Par exemple, pour obtenir un nom d'utilisateur aléatoire à partir de votre table 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

Pour générer un entier aléatoire ...

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

Pour générer une chaîne varchar aléatoire

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

Et enfin, une date aléatoire

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

20
2017-07-31 18:09



Comme Aaron l’a déjà suggéré dans son commentaire, je ne réinventerais pas vraiment la roue.

Il suffit d'aller chercher certains des outils déjà disponibles pour cela.

Ici est un article sur la façon de faire cela dans VS et le thread ici sur StackOverflow.

Générateurs de données pour serveur SQL?


7
2017-08-01 09:34



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

1
2018-03-23 13:00