我有一个SSIS包,第一个任务执行存储过程以验证运行日期不是假日.如果是假日,则返回计数为1的记录集.
如果recordcount为1,我希望能够停止SSIS,但如果recordcount为零,则继续运行.我不知道实现这个的最佳方法.我应该在包中添加什么控制流程项?
我是SSIS的新手,所以我不知道要添加什么项目.任何帮助都会很棒.
小智 7
这是一个可能的选项,可以让你有一个想法来实现这一目标.该示例通过检查包含假期列表的表来检查今天的日期是否为假日.其余的包任务只有在今天的日期不是假期时才会执行.该示例使用SSIS 2008 R2和SQL Server 2008 R2数据库.
分步过程:
使用SQL Scripts部分下给出的脚本创建一个名为dbo.Holidays和存储过程的表.填充表格,如屏幕截图#1所示.dbo.CheckTodayIsHoliday
在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
Run Code Online (Sandbox Code Playgroud)
截图#1:

截图#2:

截图#3:

截图#4:

截图#5:

截图#6:

截图#7:

截图#8:

截图#9:

截图#10:

截图#11:

截图#12:

截图#13:

一种方法是创建一个执行 SQl 任务来使用它来设置变量 @Holiday 的值。然后通过右键单击绿线本身并单击编辑,将执行 SQl 任务的成功流程线更改为成功和约束。选择“表达式”和“约束”作为求值操作,然后为表达式添加如下所示的表达式:
@Holiday == 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13215 次 |
| 最近记录: |