首页 > 解决方案 > 通过 SQL Server 代理运行的 SSIS 包无法修改变量

问题描述

首先是基础知识:我正在使用 VS2015 SSDT 创建一个 SSIS 包来获取 DFSR 共享(Windows 2012 R2)上的两个文件,然后将其导入 SQL Server 2016 数据库。该包通过 SQL Server 代理运行。SQL Server 代理在对 DFSR 文件夹和后续文件具有权限的域帐户下运行。

问题:我遇到了一个奇怪的问题,我似乎已经减少到让 SSIS 脚本任务无法更改 SSIS 变量的值。

我有一个脚本任务,它使用 VB2015 检查两个文件是否存在。文件路径使用变量来构建完整路径,然后检查两者是否存在。如果它们都存在,它将变量设置为“True”然后存在。这在测试功能时在 VS2015 SSDT 中运行得很好,但在 SQL Server 代理下运行时变量不会改变。

这是代码:

Public Sub Main()
    Dim filepath As String = CStr(Dts.Variables("User::varFileDirectory").Value)
    Dim emplfile As String = filepath + CStr(Dts.Variables("User::varEmployeeCSVFile").Value)
    Dim histfile As String = filepath + CStr(Dts.Variables("User::varHistoryCSVFile").Value)
    If (File.Exists(emplfile) AndAlso File.Exists(histfile)) Then
        Dts.Variables("User::varFilesExist").Value = True
    Else
        Dts.Variables("User::varFilesExist").Value = False
    End If
    Dts.TaskResult = ScriptResults.Success
End Sub

在此处输入图像描述

如果在文件夹中找到文件,则将 User::FilesExist 设置为“True”,然后在后续约束中用作表达式:

在此处输入图像描述

我在从 SSDT 2015 进行测试时通过了此约束,但是一旦将其部署到 SQL Server 2016 上的 SSIS 存储库,当那里有文件时,它就不再通过此约束。

我通过简单地将“User::varFilesExist”的默认值设置为“True”来验证我的包运行。完成此操作后,该包将从 SQL Server 代理完美运行。在第一次运行时,它会删除已加载的文件,因此当它第二次运行时,由于这些文件不存在而失败。

我觉得我遗漏了一些简单的东西,但脚本似乎没有更改/更新脚本中“User::FilesExist”的值。我相信我的 VB2015 代码是正确的,因为它在 VS2015 SSDT 中运行时测试得很好

标签: sql-serverssissql-server-data-toolssql-server-agent

解决方案


今天我安装了 SSDT 2017 并带来了我的包。测试然后部署,一切都按预期工作。不知道发生了什么。


推荐阅读