SSIS:如何将SQL语句从文件中提取到字符串变量中?

问题描述

这是我做这件事的方式(在到处搜索答案却一无所获之后)。

我从“导出数据向导”创建的程序包开始,因此我的说明与此相关。这样做可以建立列映射。如果您没有使用“导出向导”来创建程序包,则可能需要手动添加列。

  1. 将名为sqlFileName的字符串变量添加到包中。
  2. 将名为sqlCommand的字符串变量添加到包中。
  3. 在控制流的开头添加脚本任务。
  4. 编辑脚本任务,然后转到“脚本”部分。
  5. sqlFileName添加到ReadOnlyVariables部分。将其设置为您的.sql文件的路径。
  6. sqlCommand添加到ReadWriteVariables部分。
  7. 单击设计脚本。
  8. 粘贴在下面的脚本中。它只是将sqlFileName指定的文件内容读入sqlCommand。
  9. 确定您的出路,然后将脚本任务连接到其余的控制流。
  10. 转到您的数据流,然后选择“源查询”。您需要使用属性窗口来编辑属性。如果您使用精美的“编辑”窗口,则会收到有关未设置命令文本的错误。这是因为sqlCommand在设计时是空白的。
  11. 将AccessMode从变量更改为sql Command。
  12. 在“ sqlVariableName”下,选择“ sqlCommand”。
  13. 您会看到一个红色的X被添加到了“源查询”中。那是因为sqlCommand是空白的。为防止红色X,请将ValidateExternalMetaData更改为False。

就是这样 我希望我记得所有的点点滴滴。脚本是关键部分,因此您可以将sql放入变量中,然后在数据流中使用该变量。

   Imports System
    Imports System.IO
    Imports Microsoft.sqlServer.Dts.Runtime

    Public Class ScriptMain

        Public Sub Main()

            Try

                Dts.Variables("sqlCommand").Value = System.IO.File.ReadAllText(Dts.Variables("sqlFileName").Value.ToString)

                Dts.TaskResult = Dts.Results.Success

            Catch oException As System.Exception

                Dts.TaskResult = Dts.Results.Failure

            End Try

        End Sub

    End Class

解决方法

我有一些存储在文本文件中的SQL语句。如何将这些文件提取到SSIS中的字符串变量中,以便可以在多个地方使用同一查询?


回答问题:

查询是漫长而复杂的,我希望在真实的文本编辑器中而不是在SSIS文本框中进行编辑。我还希望那些无法访问SSIS或不知道如何使用它的人可以编辑查询。最后,每个查询都在许多不同的数据流中使用。如果我错了,请纠正我,但是如果我在多个地方使用相同的查询,我相信我必须使用变量或为每个数据流重新编写代码。