2013-07-31 18 views
13

Chcę utworzyć procedurę składowaną, aby wstawić losowe dane w tabeli "Wideo". Wygenerowałem już 30 000 rekordów dla tabeli UserProfile.Jak generować losowe dane w serwerze SQL

Uwaga: Nazwa użytkownika to element FK w tabeli wideo.

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

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

+0

dzięki wygląda użyteczne –

+3

Dlaczego nie [używaj narzędzia zamiast ponownego wynajdowania koła] (http://www.red-gate.com/products/sql-development/sql-data-generator/)? –

Odpowiedz

16

To nie jest zbyt trudne do generowania losowych danych, nawet w SQL

Na przykład, aby uzyskać losową nazwę użytkownika z tabeli 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 

Aby wygenerować losową liczbę całkowitą ...

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 

Aby wygenerować losowy ciąg 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 

I wreszcie, losową datę

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

Jak Aarona już zasugerował w swoim komentarzu - ja Naprawdę nie wymyślam od nowa koła.

Po prostu idź i znajdź niektóre z już dostępnych narzędzi do tego.

Here to artykuł o tym, jak to zrobić w VS i wątku tutaj na 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

proszę dodać opis wyjaśniający odpowiedź. – jjj

Powiązane problemy