使用脚本任务来动态创建SSIS包变量

  • 格式:docx
  • 大小:250.43 KB
  • 文档页数:7

使用脚本任务来动态创建 SSIS 包变量
SSIS 的优点之一就是能够动态创建可以输入并控制不同元素的任务,不需要硬编码只能执 行一项任务的程序包.这里我们可以来学习如何使用脚本任务来动态创建输出文件. 简单来说,我们是要利用包变量来生成一个代表输出文件的位置和名称的输出文件名, 利用脚本任务来动态创建输出文件名. 使用这个方法来修改变量信息并不只限于输出文件信息. 你还可以用这个方法来生成输 入文件位置, 用于执行 SQL 任务的复杂查询, 插入数据等等. 脚本任务是一个很强大的工具, 向程序开发员提供了别的控制流工具所不具备的性能. 我们下面提供了一些简单的例子, 使用脚本任务来动态修改分配给一个输出平面文件连 接的变量,进而可以按照我们选择的文件名和位置来保存该文件. 创建程序包 首先,利用 SQL Server Business Intelligence Design Studio (BIDS) 新建一个 Integration Services 项目. 在控制流表面上添加一个数据流任务 在连接管理器里,创建一个连接到 AdventureWorks 数据库的 OLE DB 连接 双击数据流任务,并添加一个 OLE DB 来源,设 置为任意的表或视图(在这里我使用 Purchasing.vVendor 视图) 添加一个平面目的文 件,并通过数据源路径(绿色箭头)连接这两个对象,如下所示. 打开平面目的文件编辑器,新建一个连接,选择名为"CSV File Output"的输出文件 类型.另外,选择任意的一个文件名,该文件名会在之后被动态生成.
添加程序包变量


回到控制选项卡,右击除对象和选择变量以外的任意位置.(这样做是为了保证下一步 即将设计的变量适用范围包含整个程序包.)另外一种办法是从菜单里选择视图|其他视窗| 变量. 添加以下变量(在程序包范围内). 类 型 字 符 串
名称
描述

mDirectory
文件输出目录.
C:\SSIS\Output
mFilePrefix
字 文件名(适用于你所在组织的描述性名称) 符 串
Vendors
获得用于平面文件连接的输出文件名和路 字 mOutFileName 径.设置一个默认的值(使用平面文件连接 符 对象使用的当前文件路径) 串
C:\SSIS\Output\Vendors.txt
添加脚本任务 现在向控制流中数据流任务以上添加一个脚本任务.连接这两个对象(从脚本任务到数 据流任务),并存在优先约束,如下图所示. 打开脚本任务编辑器.我们会使用默认设置,但是需要向脚本选项卡里添加以下变量.通过 在这个属性窗口里设定变量,我们可以让这些变量适用于脚本任务.注意:变量名称必须跟 之前设定的一致,并且区分大小写. ReadOnlyVariables ReadOnlyVariables ReadWriteVariables 下面是设定脚本变量的例子. mDirectory, mFilePrefix mOutFileName


然后选择"设计脚本……"按钮,就可以打开 Visual Studio for Applications (VSA) 设计环境.在默认设置中,你只有一个设计方法:Main. 以下面的文本代替 Main 方法: Public Sub Main() ' ' MSSQLTips: Modify Output File Location ' Dim sFinalFileNameAndPath As String Dim sDirectory As String Dim sFilePrefix As String sDirectory = Dts.Variables("mDirectory").Value.ToString If Not (sDirectory.EndsWith("\")) Then sDirectory = sDirectory + "\"


End If sFilePrefix = Dts.Variables("mFilePrefix").Value.ToString
sFinalFileNameAndPath = sDirectory + sFilePrefix + "-" + Month(Now.Date).ToString + Year(Now.Date).ToString + ".txt" Dts.Variables("mOutFileName").Value = sFinalFileNameAndPath Dts.TaskResult = Dts.Results.Success End Sub 下图是在粘贴以上编码后的部分脚本.
讨论 编码有点超出了本文所讨论的范围,这里只简要解释一下.以上代码从 SSIS 变量读取目录信息转化为一个字符串变量,并保证该变量以"\"字符结束,以实现完整文 我们把输出路径和文 件名和文件路径的格式化. 文件前缀同样是由一个字符串变量里获取.


件名制成一个字符串变量, 动态添加进月份和年到文件名中. 文件的扩展名最后添加".txt" 结束. 最后完整文件路径中设定 SSIS 变量 mOutFileName.记住我们在脚本任务里把改变量设 置成可读写.最后,把 DTS.TaskResult 值设置为成功,结束脚本. 现在可以关闭 VSA 环境了. 更改平面文件连接 更改平面文件连接 选择平面文件连接对象"CSV 文件输出" 右击并选择属性选项 选择属性表达, 然后点击省略号. 在属性表达编辑器里,选择 ConnectionString 属性,如下图所示.
然后选择"…"按钮,打开下图所示的建立表达界面. 把表达设置为@[User::mOutFileName], 可以通过从变量视窗里把值拖动到表达视窗里, 如下图所示,然后选择确定.


轻松搞定.现在你已经动态修改了你的文件名,在文件名最后添加了年份,并把文件保 存在你通过 mDirectory 变量指定的位置.