我有一个SSIS包,第一个任务执行存储过程以验证运行日期不是假日。如果是假日,则返回计数为1的记录集。
如果recordcount为1,我希望能够停止SSIS,但如果recordcount为零,则继续运行。我不知道实现这个的最佳方法。我应该在包中添加什么控制流程项?
我对SSIS比较陌生,所以我不知道要添加什么项目。任何帮助都会很棒。
答案 0 :(得分:7)
这是一个可能的选项,可以帮助您实现这一目标。该示例通过检查包含假期列表的表来检查今天的日期是否为假日。其余的包任务只有在今天的日期不是假期时才会执行。该示例使用SSIS 2008 R2
和SQL Server 2008 R2
数据库。
分步流程:
使用 SQL Scripts 部分下提供的脚本创建名为dbo.Holidays
的表和名为dbo.CheckTodayIsHoliday
的存储过程。填充表格,如屏幕截图# 1 。
在SSIS包上,创建两个名为RecordCount
和SQLProcedure
的变量。使用值填充它们,如屏幕截图# 2 所示。另外,创建一个OLE DB连接以连接到SQL Server数据库。我在此示例中将其命名为 SQLServer 。请参阅屏幕截图# 3 。该示例使用数据源而不是正常连接。这就是屏幕截图中图标不同的原因。
在SSIS包上,放置Data Flow task
并在数据流任务中放置OLE DB source
和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:
答案 1 :(得分:4)
一种方法是创建一个Execute SQl任务,用于设置变量@Holiday的值。然后通过右键单击绿线本身并单击编辑,将执行SQl任务的成功流程线更改为成功和约束。选择Expression和Constraint作为评估操作,然后为表达式添加类似下面的表达式:
@Holiday == 0