Выберите, какие строки записываются во время задач регистрации ошибок служб SSIS. - PullRequest
2 голосов
/ 08 марта 2019

Если я пытаюсь вставить две непонятные строки с использованием служб SSIS в таблицу с первичным ключом, как определить, какая строка записывается в таблицу, а какая обрабатывается задачей регистрации ошибок?

Например, у меня есть таблица назначения с двумя столбцами и ограничением первичного ключа, и я пытаюсь вставить две строки из исходной таблицы, которые имеют одинаковые значения, но без ограничения первичного ключа.

(KeyColumn UNIQUEIDENTIFIER NOT NULL, TextColumn VARCHAR(50) NULL)

ЕслиУ меня есть две строки с одним и тем же первичным ключом, попытка вставить обе приведет к аварийному завершению пакета служб SSIS, но если я добавлю протоколирование ошибок для записи дублирующейся строки, у меня будет 1/2 шанс записать неверную запись

| KeyColumn  |   TextColumn  |
|     1      | 'ValidRecord' |
|     1      |'InvalidRecord'|
|     2      | 'ValidRecord' |

При условии, что я могу последовательно определить действительную запись (например: TextColumn никогда не должен содержать текст 'Invalid'), как я могу создать задачу SSIS, чтобы всегда записывать правильную запись в мою таблицу SSIS и отправлять неправильную запись в журналзадача

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Вы можете достичь этого, используя 2 подхода:

(1) Использование компонента скрипта

Если вам нужно проверить дубликаты на основе KeyColumn (первый случай действителен, другие недействительны), вы можете использовать компонент сценария для достижения этой цели.

  1. Сначала добавьте 1 выходной столбец типа DT_BOOL (Пример имени: флаг)
  2. Внутри скрипта используйте похожий скрипт:

    using System.Collections.Generic;
    
    public class ScriptMain:  
        UserComponent  
    
    {  
    
        List<string> lstKey = new List<string>;
    
        public override void Input0_ProcessInputRow(InputBuffer0 Row)  
        {  
    
            if(!lstKey.Contains(Row.KeyColumn.ToString()){
    
                lstKey.Add(Row.KeyColumn.ToString());
                Row.Flag = true;
    
            }else{
    
                Row.Flag = false;
    
            }
    
        }  
    
    }
    
  3. Добавить условное разбиение для разбиения строк на основе значения столбца Flag, используя аналогичное выражение:

    [Flag] == True
    
  4. Сопоставить путь True к таблице назначения и путь False к месту регистрации ошибок

(2) Использование условного разбиения

Если вы можете проверить, является ли orw действительным на основе текстового столбца, то вы можете добавить условное разбиение со следующим выражением:

FINDSTRING([TextColumn],'InvalidRecord',1) == True
0 голосов
/ 08 марта 2019

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

0 голосов
/ 08 марта 2019

В редакторе назначения OLEDb есть количество строк в пакете, вы можете ввести 1 там. Затем, когда произойдет сбой служб SSIS, вы получите запись, в которой произошел сбой.

На похожую заметку - В предоставленной вами таблице ключевой столбец не может иметь две строки с одинаковым значением 1. Вы должны быть в состоянии решить эту проблему в своей промежуточной таблице.

Одно дополнение. способ справиться с этим - выполнить поиск по ключевому столбцу и перевести существующие ключи в другую задачу.

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