开发者社区 问答 正文

从SQL生成随机值

看起来像大多数其他产品一样,SQL Server的Random Function实际上并不是那么随机。因此,我们有这个不错的小函数来生成10个char值。是否有更好的方法来完成以下操作。我打赌那里。

DECLARE @SaltCount INT; SELECT @SaltCount = COUNT() FROM tmp_NewLogin; PRINT 'Set Salt values for all records' + CAST(@SaltCount AS VARCHAR(10)) DECLARE @CharPool CHAR(83); DECLARE @Salt VARCHAR(10); SET @CharPool = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&()+,-./:;<=>?@';

SET NOCOUNT ON; updateSaltValue: SET @Salt = '' SELECT @Salt = @Salt + SUBSTRING(@CharPool, number, 1) FROM ( SELECT TOP 10 number FROM MASTER..[spt_values] WHERE TYPE = 'p' AND Number BETWEEN 1 AND 83 ORDER BY NEWID() ) AS t

UPDATE TOP(1) [table] SET [Salt] = @Salt WHERE [Salt] IS NULL

IF (@@ROWCOUNT > 0) GOTO updateSaltValue

SET NOCOUNT OFF;

PRINT 'Completed setting salts for all records';

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 16:21:45 385 分享 版权
1 条回答
写回答
取消 提交回答
  • 大多数程序员在重新发明随机化功能时犯了一个错误,最终得到的东西根本不是随机的。我建议您坚持使用内置的RAND()函数。种子一次,然后根据需要获取尽可能多的值。

    2019-11-18 16:21:50
    赞同 展开评论