我有一个 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 source
and 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