Задача сценария служб SSIS не разветвляется, если файл не существует - PullRequest
1 голос
/ 03 декабря 2011

Я следовал советам на этом и других сайтах, чтобы проверить, существует ли файл с помощью задачи «Сценарий».Код работает отлично (шаги выполняются только в том случае, если файл существует), если я не хочу выполнять другую обработку, если файл не существует.Когда я пытаюсь перейти к другой обработке, когда файл не существует, эта ветвь никогда не выполняется, и пакет завершается успешно, не выполняя шаги в ветви «файл не существует».Вот что делает пакет.

  1. Проверьте, существует ли файл заголовка.Если да, перейдите к шагу 2. Если нет, перейдите к шагу 4.
  2. Обработка файла заголовка
  3. Удаление файла заголовка
  4. Проверьте, существует ли файл сведений.Если да, перейдите к шагу 5. Если нет, остановите обработку
  5. Обработка файла подробностей
  6. Удалите файл подробностей

Переменные пакета:

blnFileExists: Boolean, по умолчанию False

strListIndexFileFullPath: строка, выражение, основанное на других строковых переменных, которые задают имя файла и путь к файлу

Задача сценария

Свойства: FailPackageOnFailure: False, FailParentOnFailure: False

Imports System.IO
Public Sub Main()
    Dts.Variables("blnFileExists").Value = File.Exists(Dts.Variables("strListIndexFileFullPath").Value)
    Dts.TaskResult = ScriptResults.Success
End Sub

Свойства ограничения «файл существует»> Операция оценки: Выражение и ограничение, Значение: Успех, Выражение: @ blnFileExists ==True, с использованием логического AND

Свойства ограничения «файл не существует»> Операция оценки: выражение и ограничение, значение: успех, выражение: @ blnFileExists == False, использование логического AND

1 Ответ

3 голосов
/ 03 декабря 2011

В Редакторе ограничений предшествования вам нужно изменить Logical AND на Логическое ИЛИ .

В вашем сценарии вы хотите, чтобы пакет принимал либо путь, когда значение blnFileExists равно true , либо путь, когда значение blnFileExists равно false . (Notice the OR in the sentence) Если вы установите ограничение на Logical AND, то пакет будет ожидать, что оба выражения завершатся успешно. Это невозможно в этом сценарии, поскольку переменная blnFileExists может иметь только true или false и not both.

Сказав это, вам на самом деле не нужно использовать Script Task, чтобы проверить, существует файл или нет. Вы можете использовать File System Task, чтобы сделать то же самое.

Пожалуйста, посмотрите на мой ответ в приведенной ниже ссылке, чтобы увидеть, как вы можете проверить, существует ли файл или нет с помощью File System Task. Когда вы используете File System Task, вам не нужно писать код на C # или использовать выражения в ограничениях приоритета.

Ветвление после задачи файловой системы в SSIS без сбоя пакета

Надеюсь, это поможет.

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