#sql #sql-server-2008 #collation
#sql #sql-server-2008 #сопоставление
Вопрос:
Я вставляю данные в таблицы с использованием динамического SQL:
SET @Profiles = N'SELECT ''' @var1 ''' as col1, col2, col3, col4, col5, col6, col7
FROM ' @TableName 'tbl1'
INSERT INTO
table (col1, col2, col3, col4, col5, col6, col7)
EXEC (@Profiles)
Приведенный выше запрос находится в хранимой процедуре, которая выполняется заданием.
Я заметил, что при выполнении задания данные с японскими символами вставляются правильно, но когда задание завершено, и я выбираю вставленную таблицу, она возвращает «?» вместо японских символов. Я использую сопоставление SQL_Latin1_General_CP1_CI_AS
, и мой тип данных столбца nvarchar
равен . Я также пытался изменить сопоставление, но даже при сопоставлении на японском языке оно возвращает ‘?’. Вы знаете, как я могу с этим справиться?
РЕДАКТИРОВАТЬ 1 Я забыл добавить, что хранимая процедура находится в пакете SSIS. Может быть, это может помочь.
Комментарии:
1. Имеете ли вы дело с
NVARCHAR
типами данных на каждом этапе? Например, вы используетеVARCHAR
переменную или выбираете данные изVARCHAR
столбцов перед их вставкой?2. Типы данных исходного и целевого столбцов и их размеры одинаковы. Также, когда я запускаю хранимую процедуру вручную, все в порядке. Проблема возникает, когда я запускаю хранимую процедуру из задания.
Ответ №1:
Я нашел, что было не так. На последнем шаге пакета SSIS у меня есть функция, которая удаляет непечатаемые белые символы, и этот параметр функции был varchar вместо nvarchar. Я изменил его на nvarchar, и теперь все в порядке.