Existe uma solução muito mais fácil...
O SQL Server oferece suporte ao tipo de dados XML e à decodificação de entidades codificadas em XML/HTML. Se você acabou de converter a string para o tipo de dados XML, poderá usar a função de decodificação integrada.
Isso ficaria assim:
select cast('Q & A' as XML).value('.[1]','nvarchar(max)' );
Para transformá-lo em uma função de fácil utilização:
create function dbo.xmlDecode (@string nvarchar(max))
returns varchar(max)
begin
return cast(@string as XML).value('.[1]','nvarchar(max)' )
end;
Tenha em mente que no exemplo do OP, a string parece ter sido codificada 3 vezes seguidas.
&
foi transformado em &
depois em &
e depois em &
. Como resultado, para obter a string "original" de volta, você deve usar a função de decodificação 3 vezes.