How to generate alpha number values from a sql query?
I am using the below in my stored procedure to create a 8 digit password and return it as output.
select @AuthKey = @AuthKey + char(n) from
(
select top 8 number as n from master.. spt_values
where type= 'p' and num开发者_运维问答ber between 48 and 57
order by newid()
) as t
But i want the output as alpha numeric value, instead of just numeric value. How can i get it ?
Anuya -- this is a very clever way to randomize values, using order by newid()
. You can also use lowercase characters, if your passwords are case sensitive:
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
Using a slightly different approach, you could include a specific character set, including symbols:
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
Of course this only includes any given character one time. Still it is a very clever way of generating passwords. Kudos!
Edit: If you want to have the chance of having doubles, you can do it like this :
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
(will be slightly faster too as the query doesn't require sorting spt_values.
精彩评论