declare @vb varbinary(300), @str varchar(300) select @vb = 0xA12B8CDEFF122008BDDDFDD12C
exec master..xp_varbintohexstr @vb, @str out 
print @str这样确实可以转换成字符串..但我发现只能转换500多个字符出来..
我的varbinary长度有1000多.后面的他就显示不出来了.有什么办法解决没有.不好意思.我没有多少分了.还望见谅!

解决方案 »

  1.   

    exec master..xp_varbintohexstr @vb, @str out 
    这个系统函数一次最多能传255位的varbinary..长了就运算不出来了.有办法解决吗..
      

  2.   

    xp_varbintohexstr只支持512长度的varbinary转化,你想转化超过512长度的得先将原数据拆分成多个<=512的varbinary数据
      

  3.   

    用substring(@vb,1,256)substring(@vb,257,256)……拆分
      

  4.   

    如果长度不定你可以这么做
    declare @vb varbinary(2000), @str varchar(4000),@i int,@max int,@sql nvarchar(4000),@mix nvarchar(1000)
    select @vb = ……(略)
    select @max=datalength(@vb)/256+1,@i=1,@sql='',@mix='set @str='''''
    while @i<=@max
      select @sql=@sql+'declare @vb'+convert(varchar,@i)+' varbinary(256),'
        +'@str'+convert(varchar,@i)+' varchar(512) select @vb'
        +convert(varchar,@i)+'=substring(@vb,'+convert(varchar,@i*256-255)
        +',256) exec master..xp_varbintohexstr @vb'+convert(varchar,@i)+', @str'
        +convert(varchar,@i)+' out ',
        @mix=@mix+'+@str'+convert(varchar,@i),@i=@i+1
    set @sql=@sql+@mix
    exec sp_executesql @sql,N'@vb varbinary(2000),@str varchar(4000) output',@vb,@str out
    print @str