SSIS, обрабатывающий НУЛЬ и пробелы

#ssis

#ssis

Вопрос:

здравствуйте, я новичок в SSIS, и я получаю текстовый файл, созданный SSIS iam с помощью мастера загрузки в таблицу oracle, но в текстовом файле есть столбцы, содержащие строку NULL, а другие содержат пустую строку вместо столбца нулевой длины, есть ли автоматический способ сделать так, чтобы эти значения стали фактическими нулевыми значениями в таблице, или мне нужно создать производный столбец для каждого из этих случаев

Спасибо,

Ответ №1:

В проекте SSIS в SQL Server Data Tools для Visual Studio 2015 / SQL Server 2016 обработка пустых столбцов, по-видимому, осуществляется с помощью свойства компонента источника плоского файла (не уверен, подходят ли столбцы, содержащие только пробелы).:

  1. Щелкните правой кнопкой мыши исходный файл и выберите Показать расширенный редактор ….
  2. Выберите вкладку Свойства компонента.
  3. Установите для свойства RetainNulls значение True (по умолчанию — False).

Свойство RetainNulls

Комментарии:

1. Это был окончательный ответ для моей ситуации. Следует отметить, что при этом правильно проводится различие между «data»,»»,»data» (пустая строка) и «data»,,»данные» (нулевое поле).

2. Обратите внимание, что эта опция доступна для ИСТОЧНИКА плоского файла, а не для ПОДКЛЮЧЕНИЯ к плоскому файлу.

Ответ №2:

Если вы хотите преобразовать значение в null, если ваше входное значение пустое / blank, то вы можете попробовать (при предположении, что тип данных имеет вид string / varchar) :

 LEN(TRIM([ColumnName]))==0 ? NULL(DT_WSTR, 10) : [ColumnName] 
  

Ответ №3:

Я столкнулся с той же проблемой, вы можете использовать компонент script и добавить приведенный ниже код для перебора всех столбцов и замены каждого текстового значения null фактическим значением null…

 foreach (PropertyInfo dataColumn in Row.GetType().GetProperties())
{
    if (dataColumn.Name.ToLower().EndsWith("_isnull") == false amp;amp; dataColumn.PropertyType == typeof(string))
    {
            object objValue = dataColumn.GetValue(Row, null);

            if (objValue != null amp;amp; objValue.ToString() == 'NULL')
            {
                 dataColumn.SetValue(Row, null, null);
            }
    }
}
  

Объяснение кода находится здесь

Ответ №4:

Если вы используете SSIS 2008, есть также компонент Null Manager от Tactek Data Systems. Это не бесплатно, но довольно дешево — около 10 долларов. (www.tactek.com). Вы можете преобразовать пустые строки в нули, нули в пустые строки и нули в значения «заполнителя», такие как «Неизвестно» или «NA».

Ответ №5:

Я не думаю, что есть какой-либо способ сделать это, используя стандартный исходный файл, предоставляемый SSIS. Для этого я использую пользовательский компонент под названием Delimited File Source, который можно загрузить здесь: http://ssisdfs.codeplex.com /. Как следует из ее названия, она также намного лучше справляется с файлами с разделителями, плюс у нее есть возможность обрабатывать пустые строки как NULL.

введите описание изображения здесь

Комментарии:

1. спасибо за четкий ответ, но как насчет строки null, как можно сделать ее нулевой

2. Я не знаю, как она с этим справится, но вы всегда можете использовать производное преобразование производного столбца для преобразования «нулевых» строк в нулевое значение.