为什么此查询更新dbo.product set price = rand();产生相同的随机价格

时间:2014-09-17 03:48:59

标签: sql-server

SQL Server文档说,使用相同的种子调用rand函数会产生相同的值,并且随后对rand()的调用将根据首先提供的种子生成值。

SELECT RAND(100), RAND(), RAND()

但是,比如:

update dbo.product set price= rand();

这总是为所有行生成相同的值。这种行为的“学术”解释是什么?

1 个答案:

答案 0 :(得分:0)

由于RAND不会针对每一行运行,因此您可以使用ABS(CHECKSUM(NEWID()))来完成每行的随机值。

DECLARE @Min INT = 10, @Max INT = 20
UPDATE dbo.product SET price = ABS(CHECKSUM(NEWID())) % (@Max - @Min) + @Min