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

时间:2009-10-26 13:01:58

标签: sql variables ssis

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


回答问题:

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

3 个答案:

答案 0 :(得分:7)

以下是我做这件事的方法(在搜索到答案后找不到答案。)

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

  1. 将名为SQLFileName的字符串变量添加到包中。
  2. 将名为SQLCommand的字符串变量添加到包中。
  3. 在控制流程的开头添加脚本任务。
  4. 编辑脚本任务并转到脚本部分。
  5. 将SQLFileName添加到ReadOnlyVariables部分。设置为 你的.sql文件的路径。
  6. 将SQLCommand添加到ReadWriteVariables部分。
  7. 点击设计脚本。
  8. 粘贴在下面的脚本中。它只是读入的内容 由SqlFileName指定的文件 的SqlCommand。
  9. 确定您的出路并将脚本任务连接到控制流的其余部分。
  10. 转到数据流并选择源查询。你需要 使用。编辑属性 属性窗口。如果你使用 花哨的编辑窗口,你会得到一个 关于命令文本的错误不是 被设定。这是因为SQLCommand 在设计时空白。
  11. 从变量中将AccessMode更改为SQL命令。
  12. 在SQLVariableName下,选择SQLCommand。
  13. 您会看到红色X被添加到源查询中。那是 因为SQLCommand是空白的。至 防止红色X,改变 ValidateExternalMetaData为False。
  14. 就是这样。我希望我记得所有的一切。该脚本是关键部分,因此您可以将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
    

答案 1 :(得分:4)

我不建议这样做。我的建议是存储过程。

这是怎么回事, 在连接管理器下创建文件连接。 打开文件连接的属性,然后编辑表达式。 为包含SQL文件路径的连接字符串属性创建表达式(类似于@[User::SQLFileName],其中SQLFileName是您的变量)。

设置执行SQL任务并将其指向包含刚刚创建的表达式的文件连接。 如果更改变量中的路径,它将更改SQL执行的内容(因为表达式是在运行时计算的)。您甚至可以从db加载这些路径,并为每个包含执行SQL任务的路径执行操作。 如果您使用这些文件而不仅仅是SQL任务来加载/输出数据,则需要观察列和元数据。

克里斯

答案 2 :(得分:0)

或者,(并且这可能不适用于您自己),您可以在实际数据库上创建一个视图,该视图可以在不访问SSIS包的情况下进行更改。其他用户可以像你提到的那样编辑SQL,你甚至可以在讨价还价中得到一些智能支持。

我不喜欢在SSIS文本框中编写SQL。