我写的下面的函数,输入不同的字符串,有时会产生一样的返回值
最好不用随机函数,这样可以在不同的时间相同的字符串可以有相同的返回值
create function convertascii(@str nvarchar(200))
returns bigint
as
begin declare @result bigint,@ch nvarchar(10),@i int,@strlen int
set @i=1
set @strlen=len(@str)
set @result=0 while   @i<=@strlen  
  begin   
set @ch=substring(@str,@i,1)
set @result=@result+ascii(@ch)
set @i=@i+1  
  end    return @result
end

解决方案 »

  1.   

    直接用checksum函数。例如:select checksum('asdf'),checksum('asdfg')
      

  2.   

    alter function convertascii(@str nvarchar(200))
    returns bigint
    as
    begin declare @result bigint,@ch nvarchar(10),@i int,@strlen int
    set @i=1
    set @strlen=len(@str)
    set @result=0 while   @i<=@strlen  
      begin   
    set @ch=substring(@str,@i,1)
    set @result=@result+ascii(@ch)*@i ---在这个加上当前的字符串*位置就好了
    set @i=@i+1  
      end    return @result
    end
    --这样就能区别下面两个字符串了,不知道lz是不是这个意思
    select dbo.convertascii('ada')
    select dbo.convertascii('aad')
      

  3.   

    楼上的不行,
    如果是:
    select dbo.convertascii('ad')
    select dbo.convertascii('be')
    也会变成一样