You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS脚本任务日期校验失败后需正常终止包执行的需求

修改SSIS脚本任务逻辑以实现预期行为

你需要调整脚本的返回值逻辑,并配合SSIS的控制流配置,让包在文件日期不晚于数据库最大日期时停止执行且返回成功状态,具体方案如下:

方案一:脚本标记状态 + 优先约束控制执行

  1. 修改VB脚本:新增布尔变量标记是否需要继续执行后续任务,无论日期对比结果如何,脚本都返回成功
Public Sub Main()
    Dim maxEvaluationDate As DateTime = CType(Dts.Variables("User::actual_excel_data_DB_table_MaxEvaluationDate").Value, DateTime)
    Dim fileDate As DateTime = File.GetLastWriteTime("\\servername1\folder1\folder2\Import\actual_excel_data_file.xlsx")

    Dts.Variables("User::actual_excel_data_file_FileDate").Value = fileDate
    ' 新增布尔变量,标记是否继续执行后续任务
    Dts.Variables("User::ShouldContinueExecution").Value = (fileDate > maxEvaluationDate)

    ' 无论对比结果如何,脚本都返回成功
    Dts.TaskResult = ScriptResults.Success
End Sub
  1. 配置控制流优先约束:在脚本任务之后的所有任务上,设置优先约束为「表达式和约束」:
    • 约束选项选择「成功」
    • 表达式设置为 @[User::ShouldContinueExecution] == True
      这样当文件日期不晚于数据库日期时,后续任务不会触发,包会直接以成功状态结束。

方案二:简化脚本逻辑(无需额外变量)

如果不需要标记状态,只想直接控制包停止执行并返回成功,可直接修改脚本的返回逻辑:

Public Sub Main()
    Dim maxEvaluationDate As DateTime = CType(Dts.Variables("User::actual_excel_data_DB_table_MaxEvaluationDate").Value, DateTime)
    Dim fileDate As DateTime = File.GetLastWriteTime("\\servername1\folder1\folder2\Import\actual_excel_data_file.xlsx")

    Dts.Variables("User::actual_excel_data_file_FileDate").Value = fileDate

    ' 无论日期对比结果,都返回成功
    Dts.TaskResult = ScriptResults.Success
    
    ' 如果文件日期不晚于数据库日期,直接触发包停止执行
    If Not (fileDate > maxEvaluationDate) Then
        Dts.Events.FireInformation(0, "Script Task", "文件日期未更新,包停止执行", String.Empty, 0, False)
        ' 通过设置包的终止状态,让包直接结束
        Dts.Variables("System::CancelEvent").Value = True
    End If
End Sub

注:使用System::CancelEvent变量需要确保在脚本任务的「变量」面板中勾选该系统变量的读权限。

内容的提问来源于stack exchange,提问作者Jeremy F.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:01:05