2013-07-31 19 views
13

Desidero creare una stored procedure per inserire dati casuali nella tabella 'Video'. Ho già generato 30.000 dati di record per la tabella UserProfile.Come generare dati casuali nel server SQL

Nota: il nome utente è l'elemento FK nella tabella 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 
+2

articolo qui: http://mitchelsellers.com/blogs/2008/09/12/creating-random-sql-server-test-data.aspx – christiandev

+0

grazie Sembra utile –

+3

Perché non [usa uno strumento invece di reinventare la ruota] (http://www.red-gate.com/products/sql-development/sql-data-generator/)? –

risposta

16

Non è troppo difficile da generare dati casuali, anche in SQL

Ad esempio, per ottenere un nome utente casuale dal vostro tavolo 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 

Per generare un numero intero casuale ...

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 

per generare una stringa casuale 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 

E, infine, una data casuale

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

Come Aaron già suggerito nel suo commento - I wou Non reinventare davvero la ruota.

Basta andare e trovare alcuni degli strumenti già disponibili per questo.

Here è un articolo su come eseguire questa operazione in VS e thread qui su StackOverflow.

Data generators for SQL server?

1
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 
+0

per favore aggiungi qualche descrizione che spieghi la risposta. – jjj

Problemi correlati