补充一下:
CREATE FUNCTION wf_xorreturn(@as_source char(30))
RETURNS char(30)
AS
BEGIN
declare
@li_ifor integer,
@li_len integer ,
@ls_return char(30),
@ls_pass char(30) ,
@ls_temp char(30),
@li_head integer,
@li_detail integer
set @ls_pass = '1234567890123456789'
set @ls_return = ''
IF ISNUMERIC(@as_source) = 0
begin
return @as_source
end
set @li_len = len(@as_source)
set @li_ifor = 1
while @li_ifor<=@li_len
begin
set @li_head = cast(SUBSTRING(@as_source,@li_ifor,1) as int) + cast(SUBSTRING(@ls_pass,@li_ifor,1) as int)
select @ls_temp =
case @li_head
when 10 then 'B'
when 11 then 'W'
when 12 then 'S'
when 13 then 'O'
when 14 then 'F'
when 15 then 'T'
when 16 then ';'
when 17 then '@'
when 18 then '$'
else cast(@li_head as char)
end set @ls_return = @ls_return + @ls_temp
set @li_ifor = @li_ifor + 1
endreturn @ls_returnEND
CREATE FUNCTION wf_xorreturn(@as_source char(30))
RETURNS char(30)
AS
BEGIN
declare
@li_ifor integer,
@li_len integer ,
@ls_return char(30),
@ls_pass char(30) ,
@ls_temp char(30),
@li_head integer,
@li_detail integer
set @ls_pass = '1234567890123456789'
set @ls_return = ''
IF ISNUMERIC(@as_source) = 0
begin
return @as_source
end
set @li_len = len(@as_source)
set @li_ifor = 1
while @li_ifor<=@li_len
begin
set @li_head = cast(SUBSTRING(@as_source,@li_ifor,1) as int) + cast(SUBSTRING(@ls_pass,@li_ifor,1) as int)
select @ls_temp =
case @li_head
when 10 then 'B'
when 11 then 'W'
when 12 then 'S'
when 13 then 'O'
when 14 then 'F'
when 15 then 'T'
when 16 then ';'
when 17 then '@'
when 18 then '$'
else cast(@li_head as char)
end set @ls_return = @ls_return + @ls_temp
set @li_ifor = @li_ifor + 1
endreturn @ls_returnEND
但是后面还给赋 'A', 之类。
RETURNS char(30) 把char都改成varchar吧
所有的char类型,全部改成varchar
如果传入的是abc这样的字符,你这里第一个cast就会报错。
@ls_pass varchar(30) ,
@ls_temp varchar(30),
set @ls_return = rtrim(@ls_return) + rtrim(@ls_temp)