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

时间:2011-06-16 15:26:59

标签: ssis control-flow

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

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

我对SSIS比较陌生,所以我不知道要添加什么项目。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:7)

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

分步流程:

  1. 使用 SQL Scripts 部分下提供的脚本创建名为dbo.Holidays的表和名为dbo.CheckTodayIsHoliday的存储过程。填充表格,如屏幕截图# 1

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

  4. 在SSIS包上,放置Data Flow task并在数据流任务中放置OLE DB sourceRow count transformation。请参阅屏幕截图# 4

  5. 配置OLE DB Source,如屏幕截图# 5 和# 6 所示。这将执行存储过程并获取结果。

  6. 配置Row count transformation,如屏幕截图# 7 所示。

  7. Control Flow上,我添加了一些虚拟任务,如屏幕截图# 8 所示。

  8. 右键单击数据流任务和下一个任务(序列容器)之间的连接器,如屏幕截图# 9 所示。

  9. 配置Precedence Constraint Editor,如屏幕截图# 10 所示。

  10. 屏幕截图# 11 显示包裹执行,其中{今天的June 16, 2011表格中标有假日日期(dbo.Holidays)。当然,2011年6月16日不是我工作的假期,除非我休假。

  11. 更改表格数据,如屏幕截图# 12 所示。

  12. 屏幕截图# 13 显示包裹执行情况,June 16, 2011表格中存在今天的日期(dbo.Holidays

  13. 希望有所帮助。

    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

    屏幕截图#11:

    11

    屏幕截图#12:

    12

    屏幕截图#13:

    13

答案 1 :(得分:4)

一种方法是创建一个Execute SQl任务,用于设置变量@Holiday的值。然后通过右键单击绿线本身并单击编辑,将执行SQl任务的成功流程线更改为成功和约束。选择Expression和Constraint作为评估操作,然后为表达式添加类似下面的表达式:

@Holiday == 0