日期:2014-05-18  浏览次数:20544 次

大家帮我看看这个简单函数,不知道为什么会返回NULL?
alter   function   getpassword(@a   varchar(100))
returns   varchar(100)
begin
declare   @i   smallint,@password   varchar(100)
set   @i=0
set   @password= ' '
while   (@i <=len(@a))
begin
    set   @i=@i+1
    set   @password=@password+char(ascii(substring(@a,@i,1))+1)
end
return   @password
end

--测试
select   dbo.getpassword( 'abcd ')

----------------------------------------------------------------  
NULL

(所影响的行数为   1   行)


------解决方案--------------------
alter function getpassword(@a varchar(100))
returns varchar(100)
begin
declare @i smallint,@password varchar(100)
set @i=0
set @password= ' '
while (@i <=len(@a))
begin
set @password=@password+char(ascii(substring(@a,@i,1))+1)
set @i=@i+1 --这里换一下就可以了
end
return @password
end


------解决方案--------------------
while (@i <=len(@a))改为while (@i <=len(@a)-1)
------解决方案--------------------
--alter function getpassword(@a varchar(100))
--returns varchar(100)
--begin
declare @a varchar(100)
declare @i smallint,@password varchar(100)
set @a= 'password '
set @i=0
set @password= ' '
while (@i <=len(@a))
begin
set @i=@i+1
set @password=@password+char(ascii(substring(@a,@i,1))+1)
print @@password
end
--return @password
--end

這樣看啊