web-dev-qa-db-fra.com

Comment générer des données aléatoires dans SQL Server

Je veux créer une procédure stockée pour insérer des données aléatoires dans le tableau "Vidéo". 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
17
Mubashir Ali Memon

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 dans votre table de profil utilisateur.

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
23
Louis Ricci

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

Allez simplement trouver certains des outils déjà disponibles pour cela.

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

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

8
Thomas Bovee
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
2
Alyami