Как обрабатывать NULL/пробелы в SSIS

Я создаю пакет SSIS для загрузки плоского файла (CSV) на сервер SQL.

Я получаю следующую ошибку, когда пытаюсь вставить в столбец state_code (char (2)) на SQL-сервер. Если я изменю тип данных назначения на Char(4), пакет будет выполнен успешно.

Я подозреваю, что это проблема, созданная из-за «NULL» в CSV. Пакет принимает NULL как 4 символа и пытается вставить его в Destination(Char(2)). Я много гуглил. Но подобной ситуации я нигде не нашел.

[Источник плоского файла [2]] Ошибка: сбой преобразования данных. Преобразование данных для столбца «Столбец_1» вернуло значение состояния 4 и текст состояния «Текст был усечен или один или несколько символов не соответствовали целевой кодовой странице».


person Damodara Lanka    schedule 21.12.2017    source источник
comment
В файле CSV, если ячейка содержит слово NULL, ее значением является строка из 4 символов NULL. Пустая ячейка будет интерпретироваться как значение NULL. NULL и NULL — это не одно и то же.   -  person Larnu    schedule 21.12.2017
comment
Вы можете использовать производный столбец задание. Поместите между вашим источником и пунктом назначения. Используйте его, чтобы заменить строку null на нулевое значение.   -  person David Rushton    schedule 21.12.2017
comment
Чтобы добавить к тому, что сказал @Larnu, обычно это происходит, когда вы сохраняете из Excel, поскольку Excel имеет тенденцию заменять фактические поля NULL текстом "NULL"   -  person Jacob H    schedule 21.12.2017
comment
Спасибо, ребята, можете ли вы сказать мне выражение, чтобы сделать это в преобразовании производного столбца?   -  person Damodara Lanka    schedule 21.12.2017
comment
Эй Джейкоб. Это файл CSV. Тип файла для вас: Microsoft Excel Файл значений, разделенных запятыми (.csv   -  person Damodara Lanka    schedule 21.12.2017
comment
Предполагая, что вы используете DT_WSTR, тогда что-то вроде: [Column Name] == "NULL" ? NULL(DT_WSTR,2) : [Column Name]. P.S. csv означает только файл, разделенный командами (без участия Microsoft). Кроме того, я предполагаю, что OP имеет строки NULL в csv, поскольку кто-то скопировал данные из SSMS и не удалил значение NULL с помощью функции «Найти и заменить».   -  person Larnu    schedule 21.12.2017
comment
Предусмотрено хорошее решение. почему бы не отметить его как принятый?   -  person Yahfoufi    schedule 05.01.2018


Ответы (2)


Просто добавьте преобразование производного столбца со следующим выражением, чтобы заменить строку "NULL" значением NULL:

UPPER([Column]) == "NULL" ? NULL(DT_WSTR,2) : [Column]

или вы можете заменить его пустой строкой

UPPER([Column]) == "NULL" ? "" : [Column]

ОБНОВЛЕНИЕ 1

основываясь на ваших комментариях, я опубликовал это обновление

NULL() принимает тип данных в качестве параметра, поэтому, если вы работаете со столбцами даты, вы можете использовать NULL(DT_DATE) Подробнее.

Для столбца Date вы можете использовать это выражение:

UPPER([Column]) == "NULL" ? NULL(DT_DATE) : [Column]

Для целочисленного столбца вы можете использовать это выражение:

UPPER([Column]) == "NULL" ? NULL(DT_I4) : [Column]
person Hadi    schedule 21.12.2017
comment
Я получаю ту же проблему со столбцом Date & int. каким будет выражение для столбца Date и столбца INT? - person Damodara Lanka; 22.12.2017
comment
вы можете прочитать больше здесь: docs.microsoft. com/en-us/sql/integration-services/expressions/ - person Hadi; 22.12.2017
comment
для столбцов даты вы можете использовать: NULL(DT_DATE) - person Hadi; 22.12.2017
comment
для целого числа NULL(DT_I4) - person Hadi; 22.12.2017

Когда вы работаете над экспортом данных из базы данных в плоский файл, вы не можете обрабатывать нулевые значения типа данных INT. Обратитесь к этой ссылке, где указаны типы данных, обрабатывающие нулевые значения: Документы Microsoft SQL: NULL (выражение SSIS)

person satya deep    schedule 16.08.2019