--以下示例将产生由 RAND 函数生成的四个不同的随机数。 DECLARE @counter smallint; SET @counter = 1; WHILE @counter < 5 BEGIN SELECT RAND() Random_Number SET @counter = @counter + 1 END; GO Random_Number ---------------------- 0.28769876521071(1 行受影响)Random_Number ---------------------- 0.100505471175005(1 行受影响)Random_Number ---------------------- 0.292787286982702(1 行受影响)Random_Number ---------------------- 0.868829058415689(1 行受影响)
rand()在一个查询中只能生成一个随机数。一般习惯使用ABS(CHECKSUM(NEWID()))来生成,使用更方便,分布性也不错。SELECT TOP(10) name, rand(), ABS(CHECKSUM(NEWID())) FROM sys.objects
如果未指定 seed,则 Microsoft SQL Server 2005 Database Engine 随机分配种子值。对于指定的种子值,返回的结果始终相同。以下SQL执行3次的结果是不同的:SELECT rand(), rand(), rand() GO 3以下SQL执行3次的结果是相同的:SELECT rand(0), rand(), rand() GO 3
一般使用 getdate() 的毫秒数据作为种子!如:rand(datepart(ms,getdate())*1000)
xixi 说的很对。
DECLARE @counter smallint;
SET @counter = 1;
WHILE @counter < 5
BEGIN
SELECT RAND() Random_Number
SET @counter = @counter + 1
END;
GO
Random_Number
----------------------
0.28769876521071(1 行受影响)Random_Number
----------------------
0.100505471175005(1 行受影响)Random_Number
----------------------
0.292787286982702(1 行受影响)Random_Number
----------------------
0.868829058415689(1 行受影响)
FROM sys.objects
如果未指定 seed,则 Microsoft SQL Server 2005 Database Engine 随机分配种子值。对于指定的种子值,返回的结果始终相同。以下SQL执行3次的结果是不同的:SELECT rand(), rand(), rand()
GO 3以下SQL执行3次的结果是相同的:SELECT rand(0), rand(), rand()
GO 3
--tryselect right(rand( datepart(ss,getdate())),1)
用时间作为种子,通常是系统内部自动实现的。在不指定种子的情况下就是这样。
用这种方式写,代码繁琐没有必要,而且因为getdate()的毫秒数只有333个,生成的随机数分布也不会太好。