Подтвердить что ты не робот

Как передать данные с помощью SSIS, когда столбцы базы данных определены как VARCHAR (MAX)?

Я получаю сообщение ниже при выполнении пакета.

Текст был усечен или один или несколько символов не совпадали на целевой кодовой странице.

Я беру данные из таблицы SQL с именами полей task_teammember с типом данных VARCHAR(MAX). Выпуск пакета невозможен у источника. Я набираю столбец task_teammber в VARCHAR(8000), который выполняет пакет без сообщения об ошибке. Тем не менее, получатель получает только 8000, тогда как в исходной таблице больше символов 8000.

Как перенести все данные из исходных в целевые таблицы с помощью SSIS, когда столбцы определены как VARCHAR(MAX)?

4b9b3361

Ответ 1

Для получения данных из столбцов таблицы SQL Server типа данных varchar(MAX)

вам необходимо использовать тип данных SSIS text stream [DT_TEXT]

Вот простой пример, иллюстрирующий, как SSIS автоматически передает типы данных из источника. В этом примере используется база данных SQL Server 2008 R2 и SSIS 2008 R2

Создайте следующие таблицы в базе данных SQL Server, чтобы сохранить исходный текст и использовать назначение для вставки текста с помощью пакета SSIS.

CREATE TABLE [dbo].[SourceTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [SourceText] [varchar](max) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[DestinationTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [DestinationText] [varchar](max) NOT NULL
) ON [PRIMARY]

Вставьте текст большой длины в исходную таблицу. Вы можете увидеть данные в исходной таблице, содержащей более 10 000 символов, а таблица назначения пуста перед выполнением пакета.

Before

Создайте пакет SSIS с диспетчером соединений в базе данных. Поместите задачу потока данных в задачу "Контроль потока". В рамках задачи потока данных поместите источник OLE DB и OLE DB для передачи данных с dbo.SourceTable на dbo.DestinationTable. Здесь на снимках экрана отображается статус выполнения пакета.

Execution

Если вы снова запустите запрос, вы увидите, что таблица назначения заполняется текстом из исходной таблицы с использованием пакета SSIS без каких-либо ошибок усечения.

After

Вернитесь на вкладку задачи потока данных пакета и щелкните правой кнопкой мыши на OLE DB Source, а затем нажмите Show Advanced Editor...

Advanced editor

На вкладке Advanced Editor for OLE DB Source щелкните вкладку "Свойства ввода и вывода". Разверните External Columns и выберите SourceText. Вы заметите, что SSIS установил тип данных столбца в текст stream [DT_TEXT] на основе типа данных varchar(MAX), определенного в исходной таблице.

Data type

Ниже приведены сопоставления для типов данных SQL Server VARCHAR (MAX) и NVARCHAR (MAX) в SSIS.

VARCHAR (MAX) --- > текстовый поток [DT_TEXT]

NVARCHAR (MAX) --- > Текстовый поток Unicode [DT_NTEXT]

Подробнее об этом читайте в Типы данных служб интеграции MSDN

Надеюсь, что это поможет.