问题描述
这是我做这件事的方式(在到处搜索答案却一无所获之后)。
我从“导出数据向导”创建的程序包开始,因此我的说明与此相关。这样做可以建立列映射。如果您没有使用“导出向导”来创建程序包,则可能需要手动添加列。
- 将名为sqlFileName的字符串变量添加到包中。
- 将名为sqlCommand的字符串变量添加到包中。
- 在控制流的开头添加脚本任务。
- 编辑脚本任务,然后转到“脚本”部分。
- 将sqlFileName添加到ReadOnlyVariables部分。将其设置为您的.sql文件的路径。
- 将sqlCommand添加到ReadWriteVariables部分。
- 单击设计脚本。
- 粘贴在下面的脚本中。它只是将sqlFileName指定的文件内容读入sqlCommand。
- 确定您的出路,然后将脚本任务连接到其余的控制流。
- 转到您的数据流,然后选择“源查询”。您需要使用属性窗口来编辑属性。如果您使用精美的“编辑”窗口,则会收到有关未设置命令文本的错误。这是因为sqlCommand在设计时是空白的。
- 将AccessMode从变量更改为sql Command。
- 在“ sqlVariableName”下,选择“ sqlCommand”。
- 您会看到一个红色的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或不知道如何使用它的人可以编辑查询。最后,每个查询都在许多不同的数据流中使用。如果我错了,请纠正我,但是如果我在多个地方使用相同的查询,我相信我必须使用变量或为每个数据流重新编写代码。