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

Kei*_*ler 18 sql t-sql sql-server

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

UPDATE
SomeTable
SET
    Created = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int ) ,
    LastUpdated = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int )
Run Code Online (Sandbox Code Playgroud)

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

gbn*_*gbn 34

使用 RAND(CHECKSUM(NEWID()))

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

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

CHECKSUM(NEWID()) % 365
Run Code Online (Sandbox Code Playgroud)

  • 好东西.我想知道他们为什么每行不变,但那个问题是另一天:) (4认同)
  • 另外,您的方法确实存在一个问题:它会带来负值.虽然容易修复:ABS(CHECKSUM(NEWID())%365) (3认同)