Det finns en mycket enklare lösning...
SQL Server stöder XML-datatypen och den stöder avkodning av XML/HTML-kodade enheter. Om du bara castar strängen till XML-datatypen kan du använda den inbyggda avkodningsfunktionen.
Det skulle se ut så här:
select cast('Q & A' as XML).value('.[1]','nvarchar(max)' );
För att göra det till en funktion för enkel användning:
create function dbo.xmlDecode (@string nvarchar(max))
returns varchar(max)
begin
return cast(@string as XML).value('.[1]','nvarchar(max)' )
end;
Tänk på att i OP:s exempel verkar strängen ha kodats 3 gånger i rad. &
förvandlats till &
sedan till &
och sedan till &
. Som ett resultat måste du använda avkodningsfunktionen 3 gånger för att få tillbaka den "original" strängen.