表中的每一行都需要一个不同的随机数。下面的代码对每一行使用相同的随机值。

SELECT table_name, RAND() magic_number 
FROM information_schema.tables 

我想从中得到一个INT或FLOAT。接下来,我将使用这个随机数从已知日期创建一个随机日期偏移量,例如从开始日期的1-14天偏移量。

这是为Microsoft SQL Server 2000。


当前回答

使用newid ()

select newid()

或者可能是这个

select binary_checksum(newid())

其他回答

Update my_table set my_field = CEILING((RAND(CAST(NEWID() AS varbinary)) * 10))

1到10之间的数字。

当在单个批处理中多次调用rand()时,将返回相同的数字。

我建议使用convert(varbinary,newid())作为种子参数:

SELECT table_name, 1.0 + floor(14 * RAND(convert(varbinary, newid()))) magic_number 
FROM information_schema.tables

Newid()保证每次调用都会返回不同的值,即使是在同一个批处理中,因此将它作为种子将提示rand()每次给出不同的值。

编辑以获得从1到14的随机整数。

尝试在RAND中使用种子值(seedInt)。RAND()每条语句只执行一次,这就是为什么每次都看到相同的数字。

试试这个:

SELECT RAND(convert(varbinary, newid()))*(b-a)+a magic_number 

a是较小的数,b是较大的数

您需要为每一行调用RAND()。这里有一个很好的例子

https://web.archive.org/web/20090216200320/http://dotnet.org.za/calmyourself/archive/2007/04/13/sql-rand-trap-same-value-per-row.aspx