5

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

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

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

4

2 回答 2

7

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

分步过程:

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

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

  3. 在 SSIS 包上,Data Flow task在数据流任务中放置一个OLE DB sourceand 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标记为假日。当然,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

截图#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

于 2011-06-16T17:36:37.443 回答
4

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

@Holiday == 0
于 2011-06-16T17:55:13.560 回答