как обрабатывать нулевые значения в типах данных ssis - целое число - PullRequest
0 голосов
/ 28 апреля 2020

Как загрузить пустые значения в файл типа целочисленных данных?

Я хочу загрузить данные файла CSV в sql таблицу сервера с помощью пакета ssis.

Исходный файл CSV emp данные is

id | Name |  deptno
1  |ab    |NULL
2  |      |NULL
3  |dhd   |NULL

Target sql серверная таблица emp:

id int, name varchar(50), deptno int

Я работаю с типом данных, используя режим showfited для внешних столбцов и выходных столбцов согласно типам данных целевой таблицы

после этого я выполняю пакет. здесь я не могу загрузить нулевые значения в поле int deptno

и получаю сообщения об ошибках, как показано ниже:

[Назначение OLE DB [27]] Ошибка: Код ошибки служб SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80040E21. Доступна запись OLE DB. Источник: «Microsoft SQL Server Native Client 11.0» Hresult: 0x80040E21 Описание: «Многошаговая операция OLE DB вызвала ошибки. Проверьте каждое значение состояния OLE DB, если оно доступно. Работы не было.».

[Назначение OLE DB [27]] Ошибка: произошла ошибка с назначением OLE DB. Входы [Вход назначения OLE DB]. Колонки [depno] на Назначение OLE DB. Входы [Вход назначения OLE DB]. Возвращено состояние столбца: «Не удалось преобразовать значение из-за потенциальной потери данных.».

[Назначение OLE DB [27]] Ошибка: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. Ошибка «Назначение OLE DB. Вход [Назначение OLE DB]» завершилась ошибкой, поскольку произошел код ошибки 0xC0209077, а расположение строки ошибки в «Назначение OLE DB. Входы [Назначение OLE DB]» указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть сообщения об ошибках с дополнительной информацией о сбое.

[SSIS.Pipeline] Ошибка: Код ошибки SSIS DTS_E_PROCESSINPUTFAILED. Метод ProcessInput для компонента «Назначение OLE DB» (27) завершился ошибкой с кодом ошибки 0xC0209029 при обработке ввода «Вход назначения OLE DB» (40). Указанный компонент возвратил ошибку из метода ProcessInput. Ошибка указана для компонента c, но она является фатальной и приведет к остановке выполнения задачи «Поток данных». До этого могут быть сообщения об ошибках с дополнительной информацией о сбое.

Я пробовал другой способ, используя производный столбец: UPPER([deptno]) == "NULL" ? NULL(DT_I4) : [deptno] это также дает ошибку

enter image description here

Подскажите, пожалуйста, как загрузить нулевые значения в sql серверных таблицах для целочисленных типов данных с использованием пакетов ssis?

1 Ответ

1 голос
/ 28 апреля 2020

начните с типа данных как varchar (25)

, а затем извлеките целочисленный столбец, используя вашу формулу:

UPPER([deptno]) == "NULL" ? NULL(DT_I4) : (DT_I4)[deptno]

Я думаю, вы просто забыли добавить окончательное приведение.

Вам нужно будет сделать это для всех не чисел в вашем CSV. Так что, скорее всего, также пустая строка ("").

Итак ...

UPPER([deptno]) == "NULL" ? NULL(DT_I4) : deptno == "" ? null(DT_I4) :(DT_I4)[deptno]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...