Как я могу остановить выполнение пакета на основе вывода хранимой процедуры? - PullRequest
5 голосов
/ 16 июня 2011

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

Я хочу иметь возможность остановить SSIS, если значение записи равно 1, но продолжить работу, если количество записей равно нулю.Я не знаю лучший способ реализовать это.Какой элемент потока управления я должен добавить в пакет?

Я относительно новичок в SSIS, поэтому не знаю, какой элемент добавить.Любая помощь будет великолепна.

Ответы [ 2 ]

7 голосов
/ 16 июня 2011

Вот возможный вариант, который может дать вам идею для достижения этой цели.В примере проверяется, является ли сегодняшняя дата выходным, сравнивая таблицу со списком выходных.Остальные задачи пакета будут выполнены, только если сегодняшняя дата не является выходным.В примере используются базы данных SSIS 2008 R2 и SQL Server 2008 R2.

Пошаговый процесс:

  1. Создание таблицы с именем dbo.Holidaysи хранимая процедура с именем dbo.CheckTodayIsHoliday с использованием сценария, приведенного в разделе SQL Scripts .Заполните таблицу, как показано на скриншоте # 1 .

  2. В пакете служб SSIS создайте две переменные с именами RecordCount и SQLProcedure.Заполните их значениями, как показано на скриншоте # 2 .также создайте соединение OLE DB для подключения к базе данных SQL Server.В этом примере я назвал его SQLServer .Смотрите скриншот # 3 .В примере используется источник данных вместо обычного соединения.Вот почему на снимке экрана значок отличается.

  3. В пакете служб SSIS поместите Data Flow task, а в задаче потока данных - OLE DB source и Row count transformation.Смотрите скриншот # 4 .

  4. Настройте OLE DB Source, как показано на скриншотах # 5 и # 6 .Это выполнит хранимую процедуру и извлечет результаты.

  5. Настройте Row count transformation, как показано на скриншоте # 7 .

  6. На Control Flow я поместил еще несколько фиктивных задач, как показано на скриншоте # 8 .

  7. Щелкните правой кнопкой мыши на соединителе между даннымиЗадача потока и следующая задача (контейнер последовательности), как показано на скриншоте # 9 .

  8. Настройте Precedence Constraint Editor, как показано на скриншоте # 10 .

  9. Снимок экрана # 11 показывает выполнение пакета с текущей датой (June 16, 2011) в таблице dbo.Holidays, отмеченной как выходной.Конечно, 16 июня 2011 года я не работаю, если не беру отпуск.

  10. Измените данные таблицы, как показано на скриншоте # 12 .

  11. Снимок экрана # 13 показывает выполнение пакета с сегодняшней датой (June 16, 2011) , а не , присутствующей в таблице dbo.Holidays.

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

Сценарии SQL:

CREATE TABLE [dbo].[Holidays](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [HolidayDate] [datetime] NULL,
 CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO

CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
AS
BEGIN

    SET NOCOUNT ON

    SELECT  HolidayDate
    FROM    dbo.Holidays
    WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
END
GO

Снимок экрана № 1:

1

Снимок экрана № 2:

2

Снимок экрана № 3:

3

Снимок экрана № 4:

4

Снимок экрана № 5:

5

Снимок экрана № 6:

6

Снимок экрана № 7:

7

Снимок экрана № 8:

8

Снимок экрана № 9:

9

Снимок экрана № 10:

10

Sснимок экрана № 11:

11

снимок экрана № 12:

12

Снимок экрана № 13:

13

4 голосов
/ 16 июня 2011

Ну, один из способов - создать задачу Execute SQl, которую вы будете использовать для установки значения переменной @Holiday.Затем измените строку потока «Успех», выходящую из задачи «Выполнение SQl», на «успех» и ограничение, щелкнув правой кнопкой мыши на самой зеленой строке и нажав «Изменить».Выберите Expression and Constraint в качестве операции оценки, а затем добавьте выражение, подобное приведенному ниже, для выражения:

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