Компонент скрипта служб SSIS для удаления символов '\ 0' в полях CHAR (n) - PullRequest
2 голосов
/ 18 ноября 2010

В настоящее время я работаю с базой данных, в которой есть символы \ 0.

Например, поле

Category CHAR(4)

иногда имеет значение '\ 0 \ 0 \ 0 \ 0' (4 нулевых символа), а иногда '' (4 пустых символа)

Я хочу использовать компонент сценария для индивидуализации всех полей с этой проблемой.Я написал следующий скрипт, но он не работает, так как C # преобразует '\ 0 \ 0 \ 0 \ 0' в пустую строку.

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Type rowType = Row.GetType();

    foreach (IDTSInputColumn100 column in ComponentMetaData.InputCollection[0].InputColumnCollection)
    {
        PropertyInfo columnValue = rowType.GetProperty(column.Name.Replace("_", ""));
        Object obj = columnValue.GetValue(Row, null);
        if (obj is string)
        {
            string s = (string)obj;
            StringBuilder sb = new StringBuilder();
            foreach (char c in s)
            {
                if (c < ' ')
                {
                    sb.Append(' ');
                }
                else
                    sb.Append(c);
            }
            columnValue.SetValue(Row, sb.ToString(), null);
        }
    }
}

Возможно ли преобразовать полев байтовый массив вместо строки, чтобы можно было разделять символы \ 0?

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Рассмотрите возможность преобразования char (4) в двоичное представление (используя компонент Data Conversion), а затем манипулируйте отдельными элементами оттуда.Если возможно, приведите его в исходный запрос, чтобы он уже был двоичным, прежде чем он попадет в конвейер.

0 голосов
/ 22 ноября 2010

Вам нужно сделать это в компоненте скрипта?Не могли бы вы использовать задачу «Производный столбец» и использовать «Подстрока» для извлечения каждого из значений столбца?Вы также можете использовать Trim для удаления любых пробелов.

...