Има много по-лесно решение...
SQL Server поддържа типа данни XML и поддържа декодиране на XML/HTML кодирани обекти. Ако просто прехвърлите низа към XML типа данни, можете да използвате вградената функция за декодиране.
Това би изглеждало така:
select cast('Q & A' as XML).value('.[1]','nvarchar(max)' );
За да го превърнете във функция за лесна употреба:
create function dbo.xmlDecode (@string nvarchar(max))
returns varchar(max)
begin
return cast(@string as XML).value('.[1]','nvarchar(max)' )
end;
Имайте предвид, че в примера на OP низът изглежда е бил кодиран 3 пъти подред. & се превърна в & след това в & и след това в & . В резултат на това, за да върнете „оригиналния“ низ, трябва да използвате функцията за декодиране 3 пъти.