Текст служб SSIS был усечен со значением состояния 4

Расширение на Jörn Eyrich отвечает (повышайте его ответ, если вы продвигаете этот вариант), если у вас нет контроля над вызовами dispatch_async для ваших блоков, как это может быть в случае блоков завершения асинхронизации, вы можете использовать GCD группы, использующие dispatch_group_enter и dispatch_group_leave.

В этом примере мы притворяемся, что computeInBackground - это то, что мы не можем изменить (представьте, что это обратный вызов делегата, NSURLConnection completeHandler или что-то еще) и таким образом, у нас нет доступа к вызовам отправки.

// create a group
dispatch_group_t group = dispatch_group_create();

// pair a dispatch_group_enter for each dispatch_group_leave
dispatch_group_enter(group);     // pair 1 enter
[self computeInBackground:1 completion:^{
    NSLog(@"1 done");
    dispatch_group_leave(group); // pair 1 leave
}];

// again... (and again...)
dispatch_group_enter(group);     // pair 2 enter
[self computeInBackground:2 completion:^{
    NSLog(@"2 done");
    dispatch_group_leave(group); // pair 2 leave
}];

// Next, setup the code to execute after all the paired enter/leave calls.
//
// Option 1: Get a notification on a block that will be scheduled on the specified queue:
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSLog(@"finally!");
});

// Option 2: Block an wait for the calls to complete in code already running
// (as cbartel points out, be careful with running this on the main/UI queue!):
//
// dispatch_group_wait(group, DISPATCH_TIME_FOREVER); // blocks current thread
// NSLog(@"finally!");

В этом примере computeInBackground: завершение: реализовано как:

- (void)computeInBackground:(int)no completion:(void (^)(void))block {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        NSLog(@"%d starting", no);
        sleep(no*2);
        block();
    });
}

Выход (с отметками времени от run):

12:57:02.574  2 starting
12:57:02.574  1 starting
12:57:04.590  1 done
12:57:06.590  2 done
12:57:06.591  finally!
13
задан salvationishere 27 August 2010 в 15:58
поделиться

2 ответа

Я подозреваю, или один или несколько символов не соответствуют целевой кодовой странице часть ошибки.

Если вы удалите строки со значениями в этом столбце, он загрузится? Другими словами, можете ли вы определить строки, которые вызывают сбой пакета? Возможно, данные слишком длинные, или может быть какой-то странный символ, который не нравится SQL Server.

10
ответ дан 1 December 2019 в 00:10
поделиться

Одной из возможных причин этой ошибки является то, что ваш символ-разделитель (запятая, точка с запятой, вертикальная черта и т. д.) на самом деле появляется в данных в одном столбце. Это может привести к очень вводящим в заблуждение сообщениям об ошибках, часто с именем совершенно другого столбца.

Один из способов проверить это — перенаправить «плохие» строки в отдельный файл, а затем проверить их вручную. Вот краткое объяснение того, как это сделать:

http://redmondmag.com/articles/2010/04/12/log-error-rows-ssis.aspx

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

23
ответ дан 1 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: