如何让SSIS 2008 R2中的数据流任务仅在工作日1减2天执行?
在VS2008 SSIS中实现数据流任务仅在指定日期条件下执行
核心思路
通过脚本任务结合优先约束判断当前日期是否符合“工作日1减2天”的规则,仅当条件满足时触发数据流任务(DFT)执行。
具体实现步骤
1. 添加前置脚本任务
在控制流界面,拖入一个脚本任务,放置在DFT的上游位置。
2. 编写日期判断脚本
双击脚本任务,在“脚本”选项卡点击「编辑脚本」打开VSTA编辑器,在Main方法中编写对应逻辑(以下提供两种常见场景的代码,可根据你的实际需求调整):
场景1:仅在每周第一个工作日(周一)往前推2天(上周六)执行
using System; using Microsoft.SqlServer.Dts.Runtime; namespace ST_xxxxxx { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { public void Main() { DateTime currentDate = DateTime.Now.Date; // 计算本周一的日期 DateTime monday = currentDate.AddDays(-(int)currentDate.DayOfWeek + (int)DayOfWeek.Monday); // 周一减2天即为目标日期(上周六) DateTime targetDate = monday.AddDays(-2); // 匹配则标记任务成功,否则失败 Dts.TaskResult = currentDate == targetDate ? (int)DTSExecResult.Success : (int)DTSExecResult.Failure; } } }
场景2:仅在当前为工作日且当前日期减2天仍为工作日时执行
using System; using Microsoft.SqlServer.Dts.Runtime; namespace ST_xxxxxx { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { // 自定义判断工作日逻辑(排除周六、周日) private bool IsWorkDay(DateTime date) { return date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday; } public void Main() { DateTime currentDate = DateTime.Now.Date; // 双条件判断:当前是工作日,且往前推2天也是工作日 bool conditionMet = IsWorkDay(currentDate) && IsWorkDay(currentDate.AddDays(-2)); Dts.TaskResult = conditionMet ? (int)DTSExecResult.Success : (int)DTSExecResult.Failure; } } }
3. 配置优先约束
从脚本任务拖拽箭头连接到DFT,双击箭头打开优先约束编辑器:
- 「求值运算」选择「表达式和约束」
- 「约束选项」选择「成功」
- 确认配置后,只有脚本任务执行成功(日期条件满足)时,DFT才会启动。
注意事项
- VS2008的SSIS基于.NET Framework 3.5,代码需兼容该版本。
- 若需排除法定节假日,可在
IsWorkDay方法中添加自定义节假日列表进行额外判断。
内容的提问来源于stack exchange,提问作者Trevor McCarthy
相关产品推荐
相关产品推荐

