看起来像大多数其他产品一样,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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
大多数程序员在重新发明随机化功能时犯了一个错误,最终得到的东西根本不是随机的。我建议您坚持使用内置的RAND()函数。种子一次,然后根据需要获取尽可能多的值。