通过SQL Server代理运行的SSIS包无法修改变量

时间:2018-06-11 17:21:04

标签: sql-server ssis sql-server-data-tools sql-server-agent

首先是基础知识:我正在使用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

enter image description here

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

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:0)

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