开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜