Jest o wiele prostsze rozwiązanie...
SQL Server obsługuje typ danych XML i obsługuje dekodowanie jednostek zakodowanych w formacie XML/HTML. Jeśli po prostu rzucisz ciąg na typ danych XML, możesz użyć wbudowanej funkcji dekodowania.
To wyglądałoby tak:
select cast('Q & A' as XML).value('.[1]','nvarchar(max)' );
Aby przekształcić go w funkcję łatwą w użyciu:
create function dbo.xmlDecode (@string nvarchar(max))
returns varchar(max)
begin
return cast(@string as XML).value('.[1]','nvarchar(max)' )
end;
Należy pamiętać, że w przykładzie OP ciąg wydaje się być zakodowany 3 razy z rzędu. &
został przekształcony w &
następnie do &
a następnie do &
. W rezultacie, aby odzyskać „oryginalny” ciąg znaków, musisz trzykrotnie użyć funkcji dekodowania.