Арабский текст в sp_sqlexec вставить возвращаемый вопросительный знак

#sql #sql-server

#sql #sql-сервер

Вопрос:

Записи импортируются в таблицу #FileRecords и ##TableInsert являются динамическими таблицами, это может быть таблица A, таблица B (что оправдывает причину использования exec sp_sqlexec). Когда арабская формулировка проходит через sp_sqlexec, она будет вставлена??? вместо арабской формулировки. Есть ли что-нибудь, о чем я не знаю, кроме кодировки и N перед строкой?

 DECLARE @SQL nvarchar(max) = ''
IF OBJECT_ID('tempdb..#FileRecords') IS NOT NULL
    DROP TABLE #FileRecords
CREATE TABLE #FileRecords(
    Field1 nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS
    )

INSERT INTO #FileRecords (Field1)
SELECT N'محمد'

SELECT * FROM #FileRecords

SET @SQL = N'IF OBJECT_ID(''tempdb..##TableInsert'') IS NOT NULL
    DROP TABLE ##TableInsert
CREATE TABLE ##TableInsert(
    Field1 nvarchar(1000) COLLATE Arabic_CI_AI_KS_WS
    )
    
    INSERT INTO ##TableInsert
     '

SET @SQL = @SQL   (SELECT N'SELECT N''' Field1 '''' FROM #FileRecords FOR XML PATH(''))

SET @SQL = @SQL  N'
SELECT * FROM ##TableInsert'

exec sp_sqlexec @SQL
  

Вывод:
Вывод кода выше

Ответ №1:

Используйте sp_executesql вместо этого.

Я думаю, что sp_execsql является более старой версией и не поддерживает Unicode.

Если я не ошибаюсь (кто-нибудь поправит меня, если я ошибаюсь), но sp_sqlexec больше не поддерживается.

Комментарии:

1. Я не могу напрямую говорить о том, что он не поддерживается, но процедура в настоящее время недокументирована, что означает, что она не поддерживается для использования приложением. Этот ответ предполагает, что это очень старая процедура, и, учитывая, что параметр является устаревшим text типом данных, его не следует использовать.