我是一名初学SQL人员,我正在寻找更多的SQL经验,因此我决定设计一个程序来生成X数量的随机抽签。我所在地区的彩票允许您从1-27中选择5个1-47号码和1个“兆”号码。诀窍是“巨型”数字可以重复以前的5个数字,即1,2,3,4,5,巨型1.如何高效地生成更大的彩票号码集
我创建了以下过程以生成1000万个彩票选择,并且它花费了12小时和57分钟的过程完成。虽然我的朋友用java测试了相同的东西,但花了几秒钟。我想知道是否可以对代码进行任何改进,或者是否有我犯过的错误?我是新来的,因此我正在尝试学习更好的方法等,所有的评论欢迎。
USE lotto
DECLARE
@counter INT,
@counter1 INT,
@pm SMALLINT,
@i1 SMALLINT,
@i2 SMALLINT,
@i3 SMALLINT,
@i4 SMALLINT,
@i5 SMALLINT,
@sort int
SET @counter1=0
TRUNCATE TABLE picks
WHILE @counter1<10000000
BEGIN
TRUNCATE TABLE sort
SET @counter = 1
WHILE @counter < 6
BEGIN
INSERT INTO sort (pick)
SELECT CAST(((47+ 1) - 0) * RAND() + 1 AS TINYINT)
IF (SELECT count(distinct pick) FROM sort)<@counter
BEGIN
TRUNCATE TABLE sort
SET @counter=1
END
ELSE IF (SELECT COUNT(DISTINCT pick) FROM sort)[email protected]
BEGIN
SET @counter = @counter + 1
END
END
SET @sort = 0
WHILE @sort<5
BEGIN
UPDATE sort
SET [email protected]
WHERE pick = (SELECT min(pick) FROM sort WHERE sort is null)
SET @[email protected] + 1
END
SET @i1 = (SELECT pick FROM sort WHERE sort = 0)
SET @i2 = (SELECT pick FROM sort WHERE sort = 1)
SET @i3 = (SELECT pick FROM sort WHERE sort = 2)
SET @i4 = (SELECT pick FROM sort WHERE sort = 3)
SET @i5 = (SELECT pick FROM sort WHERE sort = 4)
SET @pm = (CAST(((27+ 1) - 0) * RAND() + 1 AS TINYINT))
INSERT INTO picks(
First,
Second,
Third,
Fourth,
Fifth,
Mega,
Sequence
)
Values(
@i1,
@i2,
@i3,
@i4,
@i5,
@pm,
@counter1
)
SET @counter1 = @counter1+1
END
提示...使用数字(理货)表... – 2011-12-16 01:36:21
你说所有评论欢迎。 SQL是一个数据库,不是为计算而设计的。错误的工具。每次生成数据时,Java都会踢SQL的bytt。你可能有机会在.NET中击败java。 – Paparazzi 2011-12-16 02:52:53