2013-07-31 34 views
13

Tôi muốn tạo một quy trình được lưu trữ để chèn dữ liệu ngẫu nhiên vào bảng 'Video'. Tôi đã tạo ra 30.000 dữ liệu bản ghi cho bảng UserProfile.Cách tạo dữ liệu ngẫu nhiên trong máy chủ SQL

Lưu ý: Tên người dùng là phần tử FK trong bảng 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

Điều ở đây: http://mitchelsellers.com/blogs/2008/09/12/creating-random-sql-server-test-data.aspx – christiandev

+0

nhờ nó trông hữu ích –

+3

Tại sao không [sử dụng một công cụ thay vì phát minh lại bánh xe] (http://www.red-gate.com/products/sql-development/sql-data-generator/)? –

Trả lời

16

Nó không phải quá khó khăn để tạo ra dữ liệu ngẫu nhiên, ngay cả trong SQL

Ví dụ, để có được một tên người dùng ngẫu nhiên từ bảng userprofile của bạn.

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 

Để tạo ra một số nguyên ngẫu nhiên ...

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 

Để tạo một chuỗi varchar ngẫu nhiên

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 

Và cuối cùng, một ngày ngẫu nhiên

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

Như Aaron đã gợi ý trong nhận xét của anh ấy - tôi wou không thực sự sáng tạo lại bánh xe.

Chỉ cần đi và tìm một số công cụ đã có sẵn cho việc này.

Here là một bài viết về cách thực hiện điều này trong VS và chuỗi tại đây trên 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

vui lòng thêm một số mô tả giải thích câu trả lời. – jjj

Các vấn đề liên quan