• 1 (small) loop (but not row-by-row), using temporary lookup table, can handle variable lengths

    -------------------------------------------------------------

    Create table #HexToAlpha

    (

    recordid dec(5,0) identity(1,1)

    , hexstring varchar(20)

    , alphastring varchar(10)

    )

    Insert into #HexToAlpha values('416E6E61', '')

    Insert into #HexToAlpha values('416E6E656C6F75697361', '')

    Insert into #HexToAlpha values('416E746F696E65747465', '')

    Insert into #HexToAlpha values('4265726E616465747465', ''

    Insert into #HexToAlpha values('4265726E617264696E65', ''

    ) --etc...

    create table #NHC (numbr smallint identity(0,1), hex char(2), chr varchar(1))

    insert into #NHC (chr) select top 256 null from sysobjects

    declare @hexes char(16)

    set @hexes = '0123456789ABCDEF'

    update #NHC set hex = substring(@hexes,numbr/16+1,1)+ substring(@hexes, numbr- (numbr/16 * 16)+1, 1), chr=char(numbr)

    while exists (select * from #hextoalpha where len(hexstring) len(alphastring)*2)

    update #hextoalpha set alphastring= alphastring +

    (select chr from #NHC where substring(hexstring, len(alphastring)*2 +1,2) = hex )

    where len(hexstring) len(alphastring)*2

    drop table #NHC

    select * from #hextoalpha