从SQL生成随机值

Tha*_*had 1 sql t-sql sql-server

看起来SQL Server和大多数其他产品一样,随机函数真的不是随机的.所以我们有这个很好的小函数来生成一个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';
Run Code Online (Sandbox Code Playgroud)

use*_*850 9

大多数程序员犯了重新发明随机化功能的错误,并最终得到了一些非随机的东西.我建议你坚持使用内置的RAND()函数.播种一次,然后根据需要获取尽可能多的值.