Как я могу преобразовать "SQL_Latin1_ General" Collate с помощью пакета служб SSIS?
Мы только что заметили, что 2 наших сервера были настроены с использованием SQL_Latin1_General_CP1_CI_AS и Latin1_General_CI_AS.
Я создал скрипт, который сравнивает два источника данных снова друг с другом (так как это простая инструкция SELECT, которую я не включил, она использует те же столбцы, но из разных источников), когда я попытался объединить их вместе, я получил сопоставление ошибка.
Сообщение 468, уровень 16, состояние 9, строка 2 Не удалось разрешить конфликт сопоставления между "SQL_Latin1_General_CP1_CI_AS" и "Latin1_General_CI_AS" в операции UNION.
Одним из источников является таблица, которая заполняется пакетом служб SSIS. Существует ли способ адаптации проекта служб SSIS для преобразования формата "SQL_Latin1_General_CP1_CI_AS" в "Latin1_General_CI_AS" перед его отправкой в таблицу назначения?
Спасибо!
2 ответа
Ваше сообщение об ошибке выглядит так, будто ваш UNION находится в одном операторе SQL? например, SELECT ... UNION ... SELECT
Как описал Шива, в вашем потоке данных служб SSIS вы можете использовать два (или более) объекта-источника OLE DB и комбинировать их с преобразованием "Объединение всех". Каждый объект-источник OLE DB будет иметь только один SELECT без предложения UNION. Этот дизайн также имеет преимущества в проектировании / обслуживании (объединения имен столбцов, нет необходимости заполнять каждый столбец из каждого источника) и пропускную способность во время выполнения.
Я думаю, что вы также должны использовать эту технику на объектах источника OLE DB. http://blog.stevienova.com/2009/04/16/ssis-pulling-data-from-a-non-default-collation-db-to-a-default-collation-db/
Вы можете использовать предложение COLLATE Latin1_General_CI_AS
после каждого столбца в таблице, которые используют SQL_Latin1_General_CP1_CI_AS, как это.
SELECT COLUMN_A COLLATE Latin1_General_CI_AS AS COL1
FROM TABLE