在T-SQL UPDATE中,每行的RAND没有区别

时间:2009-07-31 20:36:03

标签: sql sql-server tsql

我有以下T-SQL来更新包含测试数据的表:

UPDATE
SomeTable
SET
    Created = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int ) ,
    LastUpdated = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int )

我希望它在过去的一年中选择随机的daes,不幸的是它每行都使用相同的日期。什么是让它更新的每一行随机的最好方法?

2 个答案:

答案 0 :(得分:34)

使用RAND(CHECKSUM(NEWID()))

  • NEWID返回GUID
  • CHECKSUM使其成为int,随机
  • int种子兰德

在您的情况下,您可以对校验和进行模数,因为CHECKSUM(NEWID())已经是随机的。

CHECKSUM(NEWID()) % 365

答案 1 :(得分:3)

如果您只想要过去一年的天数,请使用此功能(基于@ gbn的答案):

select GETDATE ( ) - ABS( CHECKSUM(NEWID()) % 365 )