Estou tentando usar sp_executesql
para executar comandos, mas me deparei com um problema em que caracteres não ingleses (também conhecidos como chineses e japoneses) são alterados para ??? quando correu.
servidor sql 2008R2 e 2012
Código de exemplo
DECLARE @text nvarchar(30) = N'select ''J こんにちは C 你好'''
SELECT @text
SELECT N'J こんにちは C 你好'
exec sp_executesql @text
exec sp_executesql N'select ''J こんにちは C 你好'''
J = japonês 'Hi' C = chinês 'Hi' conforme processado pelo google translate para fins de teste
Resultado
------------------------------
select 'J こんにちは C 你好'
------------
J こんにちは C 你好
------------
J ????? C ??
------------
J ????? C ??
Como você pode ver quando executado naturalmente ou o código é selecionado a saída é retornada conforme o esperado, porém uma vez passado por sp_executesql ele retorna como ? personagens. Vale a pena notar que se você tentar enviar um varchar em vez de um nvarchar, ele apresentará um erro, portanto, desafiadoramente, usará unicode.
Tentei alguns agrupamentos diferentes para a entrada, mas isso não parece mudar nada
Você deve passar seus caracteres unicode em SELECT
UNICODE
usandoN
: