четверг, 11 октября 2012 г.

Easy generate any random string with pattern MS SQL

select dbo.ISS_GeneratePassword('cAd0#P*f')


USE [ARSystem]
GO
/****** Object:  UserDefinedFunction [dbo].[ISS_GeneratePassword]    Script Date: 10/11/2012 13:17:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[ISS_GeneratePassword]( @template nvarchar(30) ) returns nvarchar(30)
AS
BEGIN
    if len(isnull(@template,'')) = 0
    set @template = 'cAd0#P*f'

declare @i int
    ,@c char(1)
    ,@password nvarchar(30)
    ,@special nvarchar(50)

--set nocount on
select    @i = 0
    ,@password = ''
    ,@special = '!"#$%&()*+,-./:;<=>?@{|}~'

set @i = 1
while @i <= len(@template)
begin

    set @c = 
    case
    --upper alpha [A-Z]
    when ascii(substring(@template, @i, 1)) between 65 and 90
    then    char(65 + convert(int,floor((SELECT RandNumber FROM vRandNumber)*26)))

    --lower alpha [a-z]
    when ascii(substring(@template, @i, 1)) between 97 and 122
    then    char(97 + convert(int,floor((SELECT RandNumber FROM vRandNumber)*26)))

    --number [0-9]
    when ascii(substring(@template, @i, 1)) between 48 and 57
    then    convert(char(1), convert(int,floor((SELECT RandNumber FROM vRandNumber) * 10)))
        
    --special (printable) character
    else
    substring(@special, convert(int,floor((SELECT RandNumber FROM vRandNumber)*len(@special)+1)), 1)
    
    end

    select    @i = @i+1
        ,@password = @password + @c
END
return @password
END

Комментариев нет: