【发布时间】:2008-11-06 15:41:39
【问题描述】:
看起来SQL Server 和大多数其他产品一样,随机函数确实不是那么随机。所以我们有这个很好的小函数来生成一个 10 字符的值。有没有更好的方法来完成以下工作。我敢打赌。
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';
【问题讨论】:
-
您以什么方式发现 RAND() 函数不是随机的?您需要正确播种,但可能只是您的播种方法有问题。
标签: sql sql-server tsql