我有一个 SSIS 包,第一个任务执行一个存储过程来验证运行日期不是假期。如果是假期,则返回计数为 1 的记录集。
如果记录计数为 1,我希望能够停止 SSIS,但如果记录计数为零,则继续运行。我不知道实现这一点的最佳方法。我应该在包中添加什么控制流项?
我对 SSIS 比较陌生,所以我不知道要添加什么项目。任何帮助都会很棒。
我有一个 SSIS 包,第一个任务执行一个存储过程来验证运行日期不是假期。如果是假期,则返回计数为 1 的记录集。
如果记录计数为 1,我希望能够停止 SSIS,但如果记录计数为零,则继续运行。我不知道实现这一点的最佳方法。我应该在包中添加什么控制流项?
我对 SSIS 比较陌生,所以我不知道要添加什么项目。任何帮助都会很棒。
这是一个可能的选项,可以为您提供实现此目标的想法。该示例通过检查包含假期列表的表来检查今天的日期是否为假期。仅当今天的日期不是假日时,才会执行其余的包任务。该示例使用SSIS 2008 R2和SQL Server 2008 R2数据库。
分步过程:
使用SQL 脚本部分下给出的脚本创建一个名为的表和名为的dbo.Holidays存储过程。如屏幕截图 # 1所示填充表格。dbo.CheckTodayIsHoliday
在 SSIS 包上,创建两个名为RecordCount和的变量SQLProcedure。使用屏幕截图 # 2中所示的值填充它们。此外,创建一个 OLE DB 连接以连接到 SQL Server 数据库。在此示例中,我将其命名为SQLServer 。参考截图# 3。该示例使用数据源而不是普通连接。这就是为什么屏幕截图中的图标不同的原因。
在 SSIS 包上,Data Flow task在数据流任务中放置一个OLE DB sourceand Row count transformation。参考截图# 4。
配置OLE DB Source如屏幕截图 # 5和 # 6所示。这将执行存储过程并获取结果。
配置Row count transformation如屏幕截图 # 7所示。
在 上Control Flow,我放置了更多的虚拟任务,如屏幕截图 # 8所示。
右键单击数据流任务和下一个任务(序列容器)之间的连接器,如屏幕截图 # 9所示。
配置Precedence Constraint Editor如屏幕截图 # 10所示。
屏幕截图 # 11显示了包执行,表中的今天日期 ( June 16, 2011)dbo.Holidays标记为假日。当然,2011 年 6 月 16 日不是我工作的假期,除非我放假。
更改表格数据,如屏幕截图 # 12所示。
屏幕截图 # 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:

截图#2:

截图#3:

截图#4:

截图#5:

截图#6:

截图#7:

截图#8:

截图#9:

截图#10:

截图 #11:

截图#12:

截图#13:

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