「ビデオ」テーブルにランダムデータを挿入するストアドプロシージャを作成したい。 UserProfileテーブルの30,000レコードデータを既に生成しました。
注:ユーザー名は、ビデオテーブルのFK要素です。
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
SQLであっても、ランダムデータを生成するのはそれほど難しくない
たとえば、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
ランダムな整数を生成するには...
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
ランダムな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
そして最後に、ランダムな日付
BEGIN
-- get a random datetime +/- 365 days
DECLARE @uploadtime DATETIME
SET @uploadtime = GETDATE() + (365 * 2 * Rand() - 365)
print(@uploadtime)
END
アーロンはすでに彼のコメントで提案したように-私は本当に車輪を再発明しません。
このために既に利用可能なツールをいくつか見つけてください。
Here は、VSでこれを行う方法と、StackOverflowでスレッド化する方法に関する記事です。
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