在 SSIS 的脚本任务中使用变量

Posted

技术标签:

【中文标题】在 SSIS 的脚本任务中使用变量【英文标题】:Using Variables in Script Task in SSIS 【发布时间】:2012-11-15 23:06:55 【问题描述】:

我正在使用带有连接到脚本任务的执行 SQL 任务的 SSIS 包。 Execute SQL Task 中的值存储在一个变量中,在 Script Task 中我使用以下代码提供 XML 文件。

Public Sub Main()
    If My.Computer.FileSystem.FileExists("C:\SAMPLE.xml") Then
        Dts.TaskResult = ScriptResults.Failure
    Else
        My.Computer.FileSystem.WriteAllText("C:\SAMPLE.xml", Dts.Variables(0).Value.ToString, False)
        Dts.TaskResult = ScriptResults.Success
        ''
    End If
End Sub    

我不想硬编码 XML 的路径。因此,我创建了两个新变量 FileName 和 FilePath,以包为范围。如何编辑我的 VB.Net 代码以实际使用这两个变量。我尝试了这个但没有用:

    Sub Main()
    If My.Computer.FileSystem.FileExists(Dts.Variables("FileDest").Value.ToString())        Else
        My.Computer.FileSystem.WriteAllText(Dts.Variables("FileDest").Value.ToString(), Dts.Variables(0).Value.ToString, False)Dts.TaskResult = ScriptResults.Success
   ''
    End If
End Sub

理想情况下,我想使用两个变量,一个用于名称,一个用于路径,但是当我尝试使用一个将两者结合的变量时,它不起作用。

【问题讨论】:

【参考方案1】:

我怀疑您的部分问题是在 Variables 集合中使用数字索引。添加 FileDest 变量后,无法保证用于存储执行 SQL 任务结果的任何变量仍然是集合中的第零个变量。

假设带有执行 SQL 任务结果的变量名为 XmlQueryResults,以下应该可以解决问题:

Public Sub Main()
    Dim filePath As String = Dts.Variables("FileDest").Value
    Dim xmlToWrite As String = Dts.Variables("XmlQueryResults").Value
    If My.Computer.FileSystem.FileExists(filePath) Then
        Dts.TaskResult = ScriptResults.Failure
    Else
        My.Computer.FileSystem.WriteAllText(filePath, xmlToWrite, False)
        Dts.TaskResult = ScriptResults.Success
    End If
End Sub

(不要忘记将FileDest 变量添加到脚本任务编辑器脚本选项卡中的ReadOnlyVariables。)

【讨论】:

以上是关于在 SSIS 的脚本任务中使用变量的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 脚本任务搜索文本(如果可用) 复制文件

SSIS脚本任务获取csv文件的行数

未分配 SSIS 脚本任务变量值

在SSIS脚本组件中创建时,变量不包含回车符

在 SSIS 包中将参数值传递给变量会导致运行时错误

查询值和目标字段的数量不同 - C# 脚本任务 SSIS - 使用动态列将 SQL Proc 的结果导出到 Excel