SSIS виводить рядок Юнікод як код символу Shift-JIS до текстового файлу
Шаблони, які призводять до помилок
Припустимо, що стовпець типу nvarchar в таблиці на SQL Server має рядок, який не можна використовувати в Shift-JIS. До речі, якщо помістити ці символи в стовпець varchar, є символи, які не можна використовувати, наприклад, стовпець "ColumnShiftJis" праворуч. Замініть його.
На SSIS потік налаштовується для зчитування даних з попередньої таблиці, як показано на малюнку, і виведення їх у текстовий файл.
Припустимо, що ви хочете вивести його як файл CSV. Оскільки Shift-JIS часто використовується у файлах CSV, встановіть кодування символів текстового файлу на Shift-JIS.
Якщо виконати за допомогою цього параметра, на час виведення виникне помилка.
З'явиться повідомлення про помилку, подібне до такого:
Вихідний файл також буде перервано на півдорозі, коли сталася помилка.
Якщо ви спробуєте вивести так, як є, це буде помилка, тому спробуйте включити "перетворення даних" посередині.
Перетворіть тип даних з "DT_WSTR" на "DT_STR" і перетворіть його у форму, яку можна вивести на Shift-JIS.
Однак, якщо ви також виконаєте це, ви отримаєте помилку. Це пов'язано з тим, що SSIS строго не вдається неявна обробка, що призводить до відсутності даних. Якщо ви хочете, щоб SSIS виконував обробку детипованого тексту, вам потрібно буде явно вказати підстановку символів для всіх символів.
Обхідні шляхи
Існує спосіб змінити тип тексту за допомогою SQL при читанні з таблиці в базі даних. Якщо це SQL, це рушій SQL Server, який запускає його, а не SSIS, тому він може працювати без помилок. До речі, всі символи, які не можна використовувати в Shift-JIS, є "?" Перетворено на: Це специфікація на стороні SQL Server. Навіть якщо це не SSIS, результат аналогічний для всіх систем, які використовують SQL Server.
Відкрийте перекладач ADO NET і змініть режим доступу до даних на команду SQL. Тепер, коли ви можете ввести SQL, напишіть оператор Select, щоб отримати дані з бази даних. Текст, який містить символи, які не можна використовувати в Shift-JIS, примусово перетворюється на varchar за допомогою cast.
Оскільки символи, які не можуть бути використані в Shift-JIS, вже були видалені під час потоку даних до SSIS, обробка може передаватися такою, якою вона є.
Ви можете бачити, що текст успішно записано в CSV. Крім того, всі символи, які не можна використовувати в Shift-JIS, є "?" Ви можете бачити, що він був перетворений на: