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