59 lines
1.2 KiB
Transact-SQL
59 lines
1.2 KiB
Transact-SQL
use [BS3000+_SYSTEM]
|
|
|
|
GO
|
|
IF EXISTS (SELECT 1 FROM SYS.objects WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[fn_sm_user]') AND TYPE IN (N'FN', N'IF', N'TF', N'FS', N'FT'))
|
|
DROP FUNCTION fn_sm_user
|
|
GO
|
|
|
|
create function fn_sm_user(@psw varchar(100))
|
|
returns varchar(50)
|
|
as
|
|
begin
|
|
declare @result varchar(50), --结果
|
|
@cout int, --每3位一组数量
|
|
@psw_new varchar(100), --新秘钥
|
|
@num int --截取3位数
|
|
|
|
set @result = ''
|
|
set @psw = REPLACE(@psw,'/U','')
|
|
set @psw_new = REPLACE(@psw,'+','')
|
|
set @cout = LEN(@psw)/3
|
|
|
|
if @cout=0
|
|
begin
|
|
set @result = '无密码'
|
|
end
|
|
else
|
|
begin
|
|
WHILE LEN(@psw_new)>0
|
|
begin
|
|
select @num = cast(SUBSTRING(@psw_new,1,3) as int)
|
|
begin
|
|
IF @num<126
|
|
begin
|
|
select @num=@num - 111
|
|
end
|
|
else
|
|
begin
|
|
while(@num>=126)
|
|
begin
|
|
select @num=@num - 111
|
|
end
|
|
end
|
|
select @result=@result + cast(CHAR(@num) as CHAR(1))
|
|
end
|
|
select @psw_new = STUFF(@psw_new,1,3,'')
|
|
|
|
end
|
|
end
|
|
|
|
return (@result)
|
|
end
|
|
|
|
|
|
|
|
|
|
go
|
|
|
|
select vusercode,vusername,dbo.fn_sm_user(vpassword) from sm_user
|