34,590
社区成员
发帖
与我相关
我的任务
分享
DECLARE @counter smallint;
SET @counter = 1;
WHILE @counter < 4
BEGIN
/* case 1:
SELECT RAND() Random_Number
*/
/* case 2:
select rand(10)
*/
--/* case 3:
select rand(10) Random_WithSeed, RAND() Random_Number
--*/
SET @counter = @counter + 1
END;
GO
/*
case 1 结果: 每次调用rand()返回值不同
Random_Number
----------------------
0.728291256646099
(1 行受影响)
Random_Number
----------------------
0.590118475510385
(1 行受影响)
Random_Number
----------------------
0.611138172806976
(1 行受影响)
*/
/*
case 2结果:由于给定 seed值,因此每次返回值相同
----------------------
0.713759689954247
(1 行受影响)
----------------------
0.713759689954247
(1 行受影响)
----------------------
0.713759689954247
(1 行受影响)
*/
/*
case 3结果: 显然rand([seed])对rand()调用造成影响,因为每次rand()值都相同
Random_WithSeed Random_Number
---------------------- ----------------------
0.713759689954247 0.182458908613686
(1 行受影响)
Random_WithSeed Random_Number
---------------------- ----------------------
0.713759689954247 0.182458908613686
(1 行受影响)
Random_WithSeed Random_Number
---------------------- ----------------------
0.713759689954247 0.182458908613686
(1 行受影响)
*/
啊
declare @i int
set @i=0
while(@i<10)
begin
SELECT RAND((DATEPART(mm,GETDATE())*100000)
+ DATEPART(ss,GETDATE())*1000
+ DATEPART(ms,GETDATE()))
waitfor delay '00:00:00.01'
set @i=@i+1
end
SELECT n,r1=ABS(CHECKSUM(NEWID())),r2=ABS(CHECKSUM(NEWID())),r3=ABS(CHECKSUM(NEWID()))
FROM Nums
WHERE n BETWEEN 1 AND 10