如何根据存储过程输出停止包执行?

Tar*_*ryn 5 ssis control-flow

我有一个SSIS包,第一个任务执行存储过程以验证运行日期不是假日.如果是假日,则返回计数为1的记录集.

如果recordcount为1,我希望能够停止SSIS,但如果recordcount为零,则继续运行.我不知道实现这个的最佳方法.我应该在包中添加什么控制流程项?

我是SSIS的新手,所以我不知道要添加什么项目.任何帮助都会很棒.

小智 7

这是一个可能的选项,可以让你有一个想法来实现这一目标.该示例通过检查包含假期列表的表来检查今天的日期是否为假日.其余的包任务只有在今天的日期不是假期时才会执行.该示例使用SSIS 2008 R2SQL Server 2008 R2数据库.

分步过程:

  1. 使用SQL Scripts部分下给出的脚本创建一个名为dbo.Holidays和存储过程的表.填充表格,如屏幕截图#1所示.dbo.CheckTodayIsHoliday

  2. 在SSIS包上,创建两个名为RecordCount和的变量SQLProcedure.使用值填充它们,如屏幕截图#2所示.另外,创建一个OLE DB连接以连接到SQL Server数据库.我在这个例子中将它命名为SQLServer.参见截图#3.该示例使用数据源而不是正常连接.这就是屏​​幕截图中图标不同的原因.

  3. 在SSIS包上,放置一个Data Flow task和在数据流任务中放置一个OLE DB sourceRow 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标记为假日的表格中.当然,2011年6月16日不是我工作的假期,除非我休假.

  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
Run Code Online (Sandbox Code Playgroud)

截图#1:

1

截图#2:

2

截图#3:

3

截图#4:

4

截图#5:

五

截图#6:

6

截图#7:

7

截图#8:

8

截图#9:

9

截图#10:

10

截图#11:

11

截图#12:

12

截图#13:

13


HLG*_*GEM 4

一种方法是创建一个执行 SQl 任务来使用它来设置变量 @Holiday 的值。然后通过右键单击绿线本身并单击编辑,将执行 SQl 任务的成功流程线更改为成功和约束。选择“表达式”和“约束”作为求值操作,然后为表达式添加如下所示的表达式:

@Holiday == 0
Run Code Online (Sandbox Code Playgroud)