Anuya - это очень умный способ рандомизировать значения, используя order by newid()
.Вы также можете использовать строчные буквы, если ваши пароли чувствительны к регистру:
declare @AuthKey varchar(255)
set @AuthKey = ''
select @AuthKey = @AuthKey + char(n) from
(
select top 8 number as n
from master..spt_values
where type= 'p' and (
(number between 48 and 57) -- numbers
or (number between 65 and 90) -- uppercase letters
or (number between 97 and 122) -- lowercase letters
)
order by newid()
) as t
print @AuthKey
Используя немного другой подход, вы можете включить определенный набор символов, включая символы:
declare @AuthKey varchar(255), @chars varchar(255), @len int
set @AuthKey = ''
set @chars = '012345ACDFGIJKLMSTXYZ_-#@!'
set @len = len(@chars)
select @AuthKey = @AuthKey + chr.c
from (
select substring(@chars, num.n, 1) as c
from (
select top 8 number as n
from master..spt_values
where type='p' and (number between 1 and @len)
order by newid()
) as num
) as chr
print @AuthKey
ИзКонечно, это включает в себя только один данный персонаж один раз.Тем не менее, это очень умный способ создания паролей.Слава!
Редактировать: Если вы хотите иметь шанс удвоиться, вы можете сделать это так:
declare @AuthKey varchar(255), @chars varchar(255), @len int
set @AuthKey = ''
set @chars = '012345ACDFGIJKLMSTXYZ_-#@!'
set @len = len(@chars)
SELECT TOP 8 @AuthKey = @AuthKey + SubString(@chars, 1 + Convert(int, ABS(BINARY_CHECKSUM(NewID())) % @len), 1)
FROM master..spt_values
(будет немного быстрее, так как запрос не требуетсортировка spt_values.