#ssis
#ssis
Вопрос:
здравствуйте, я новичок в SSIS, и я получаю текстовый файл, созданный SSIS iam с помощью мастера загрузки в таблицу oracle, но в текстовом файле есть столбцы, содержащие строку NULL, а другие содержат пустую строку вместо столбца нулевой длины, есть ли автоматический способ сделать так, чтобы эти значения стали фактическими нулевыми значениями в таблице, или мне нужно создать производный столбец для каждого из этих случаев
Спасибо,
Ответ №1:
В проекте SSIS в SQL Server Data Tools для Visual Studio 2015 / SQL Server 2016 обработка пустых столбцов, по-видимому, осуществляется с помощью свойства компонента источника плоского файла (не уверен, подходят ли столбцы, содержащие только пробелы).:
- Щелкните правой кнопкой мыши исходный файл и выберите Показать расширенный редактор ….
- Выберите вкладку Свойства компонента.
- Установите для свойства RetainNulls значение True (по умолчанию — False).
Комментарии:
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. Я не знаю, как она с этим справится, но вы всегда можете использовать производное преобразование производного столбца для преобразования «нулевых» строк в нулевое значение.