как проверить структуру столбца в ssis? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть таблица клиентов на моем сервере sql.

Колонны

  1. Distributer_Code
  2. Cust_code
  3. CUST_NAME
  4. cust_add
  5. молния
  6. Номер телефона
  7. dl_number
  8. gstin

мы получаем клиентские файлы от дистрибьютора ежемесячно. поэтому иногда они отправляют файлы с неправильным структурирующим устройством ... например, может быть, отсутствует gstin, отсутствует dl_number или gstin вместо dl_number, а dl_number вместо tel ... в основном столбцы могут быть разделены ..

когда мы загружаем эти плоские файлы с помощью SSIS, это выдает ошибку ... и данные не загружаются на сервер, если структура неверна.

Я хочу загрузить эти данные с нулевыми данными, если столбцы отсутствуют или столбцы не на месте.

Data Flow in SSIS

1 Ответ

0 голосов
/ 01 ноября 2018

Решение

Исходя из вашего комментария, вы работаете с плоскими файлами. Чтобы решить эту проблему, вы должны прочитать все столбцы как один столбец и получить структуру на ходу.

Подробнее

  1. Сначала добавьте диспетчер соединений с плоскими файлами.
  2. В диспетчере соединений с плоскими файлами перейдите на вкладку «Дополнительно», удалите все столбцы и оставьте только один столбец (Столбец0) .
  3. Измените тип столбца на DT_WSTR и длину до 4000.
  4. Добавить Dataflow task
  5. Внутри Dataflow task добавьте источник плоского файла, компонент сценария и назначение OLEDB.
  6. Откройте компонент скрипта, перейдите на вкладку «Ввод / вывод» и добавьте 8 выходных столбцов (Distributer_Code, Cust_code, cust_name, cust_add, zip, tel, dl_number, gstin)
  7. Измените язык сценария на Visual Basic.
  8. Внутри скрипта напишите следующий код.

    Dim Distributer_Code as integer = -1
    Dim Cust_code as integer = -1
    Dim cust_name as integer = -1
    Dim cust_add as integer = -1
    Dim zip as integer = -1
    Dim tel as integer = -1
    Dim dl_number as integer = -1
    Dim gstin as integer = -1
    Dim intRowIndex as integer = 0
    
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    
        If intRowIndex = 0 then
    
            Dim strfields() as string = Row.Column0.split(CChar("|"))
            Dim idx as integer = 0
    
            For idx = 0 To strFields.length - 1
    
                Select case str
    
                Case "Distributer_Code"
                    Distributer_Code = idx  
                Case "Cust_code"
                    Cust_code = idx 
                Case "cust_name"
                    cust_name = idx 
                Case "cust_add"
                    cust_add = idx  
                Case "zip"
                    zip = idx   
                Case "tel"
                    tel = idx   
                Case "dl_number"
                    dl_number = idx 
                Case "gstin"
                    gstin = idx 
    
                End Select
    
            Next
    
        Else
    
            Dim strfields() as string = Row.Column0.split(CChar("|"))
    
            If Distributer_Code > -1 Then Row.DistributerCode = strfields(Distributer_Code)
            If Cust_code > -1 Then Row.Custcode = strfields(Cust_code)
            If cust_name > -1 Then Row.custname = strfields(cust_name)
            If cust_add > -1 Then Row.custadd = strfields(cust_add)
            If zip > -1 Then Row.zip = strfields(zip)
            If tel > -1 Then Row.tel = strfields(tel)
            If dl_number > -1 Then Row.dlnumber = strfields(dl_number)
            If gstin > -1 Then Row.gstin = strfields(gstin)
    
        End If
    
    
        intRowIndex += 1
    
    End Sub
    
  9. Сопоставить выходные столбцы с адресатом OLEDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...