Er is een veel eenvoudigere oplossing...
SQL Server ondersteunt het XML-gegevenstype en ondersteunt het decoderen van XML/HTML-gecodeerde entiteiten. Als je de string gewoon naar het XML-datatype cast, kun je de ingebouwde decodeerfunctie gebruiken.
Dat zou er zo uitzien:
select cast('Q & A' as XML).value('.[1]','nvarchar(max)' );
Om er een functie van te maken voor eenvoudig gebruik:
create function dbo.xmlDecode (@string nvarchar(max))
returns varchar(max)
begin
return cast(@string as XML).value('.[1]','nvarchar(max)' )
end;
Houd er rekening mee dat in het voorbeeld van OP de tekenreeks 3 keer achter elkaar lijkt te zijn gecodeerd. &
werd veranderd in &
vervolgens in &
en dan in &
. Als gevolg hiervan, om de "originele" string terug te krijgen, moet je de decodeerfunctie 3 keer gebruiken.