添加Visual Basic.Net代码 现在我们可以添加实际的代码到Script组件上了。打开Script Transformation编辑器的Script页面,点击“Design Script”。 “Microsoft Visual Studio for Applications”窗口会出现,并且还包含了我们需要使用的初始Visual Basic.Net代码,如图4所示。 图4:带有VB.Net代码的“Visual Studio for Applications”窗口。
代码开头是几个关于Script组件的注释。注释都是跟在一个单引号后面。我们可以删除这些注释然后添加其它注释上……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
添加Visual Basic.Net代码
现在我们可以添加实际的代码到Script组件上了。打开Script Transformation编辑器的Script页面,点击“Design Script”。 “Microsoft Visual Studio for Applications”窗口会出现,并且还包含了我们需要使用的初始Visual Basic.Net代码,如图4所示。
图4:带有VB.Net代码的“Visual Studio for Applications”窗口。
代码开头是几个关于Script组件的注释。注释都是跟在一个单引号后面。我们可以删除这些注释然后添加其它注释上去。注意,此处生成的Visual Basic代码仅限于Script Transformation组件的。当作为源或者目标时,组件生成的代码是不同的。
自动生成的代码以一系列的Imports语句开始来定义我们可能要在脚本中使用的初始命名空间。我们可以根据需要添加更多的命名空间。ScriptMain类跟在Imports语句之后,然后是类中的Input0_ProcessInputRow()方法。我们必须以这个类和方法开始,然后再添加我们的自定义代码到方法中,此处的注释说明:“在此处添加你的代码”。
正如我们所看到的,SSIS让一切变得简单多了。只需要在指定的地方上输入我们的代码。对于本文中所探讨的方法,我首先定义了一组变量,然后将变量合并在一起来创建用户名。你可以点击此处下载所有Visual Basic.Net代码。
首先,我创建名字、中间名和姓变量,它们分别是First、Middle和Last。在第一行中,我声明了First变量类型为字符串,接着,在第二行中,我给它赋值为名字的第一个字母:
Dim First As String First = LCase(Row.FirstName.Substring(0, 1)) |
注意,我使用了Row变量——它是在Input0_ProcessInputRow()方法中定义的——来从输入中取回FirstName字段。当我取到这个名字时,我使用了Substring()方法来只截取结果的第一个字母。接着,我将结果传递给LCase()方法,将字母全部转换为小写。
对于Middle变量,我执行类似地操作,但是我首先检查了MiddleName值是否是一个NULL值:
Dim Middle As String If Row.MiddleName_IsNull Then Middle = "" Else Middle = LCase(Row.MiddleName.Substring(0, 1)) End If |
这里我使用一个If-Else-End If结构来判断值是否为NULL。如果它是一个NULL,那么我将Middle值设置为空的字符串。否则,我会跟处理名字一样取回第一个字母。
对于Last变量,我希望从LastName字段中选取前面4个字母。然而,我需要检查名称包含的字母是否少于4个,以及是否包含一个单引号:
Dim Last As String If Row.LastName.Length < 5 Then If Row.LastName.Contains("'") Then Last = LCase(Row.LastName.Replace("'", "")) Else Last = LCase(Row.LastName) End If Else If Row.LastName.Contains("'") Then Last = LCase(Row.LastName.Replace("'", "").Substring(0, 4)) Else Last = LCase(Row.LastName.Substring(0, 4)) End If End If |
首先,我在最外部使用一个If-Else-End If条件来判断名字中包含的字母是否少于5个。如果是,那么我使用整个姓的部分。如果不是,那么我只使用它前面4个字母。
为了处理好名字可能包含一个单引号的情况,我在外部的If-Else-End If条件内再嵌入一个If 和Else语句。如果名字中包含一个单引号,那么我会用一个空的字符串替代它。否则,我会使用名字本身。
最后,我将声明和赋值YearHired变量,它从HireDate字段中获取年份:
Dim YearHired As String YearHired = CStr(Row.HireDate.Year).Substring(2, 2) |
注意,我首先使用Row变量来检索HireDate字段中的Year属性。接着,我使用CStr()方法来将日期转换为字符串,然后使用Substring()方法来检索年的最后两个数字。
在我定义了这些变量之后,我通过组合这些变量来创建用户名:
If Row.HireDate < CDate("2000-01-01") Then Row.UserName = First + Last + YearHired Else Row.UserName = First + Middle + Last + YearHired End If |
再次,我使用了If-Else-End If条件来确定使用哪个逻辑。对于2000年之前所雇用的员工,我根据名字的首字母、姓的前4个字母和雇用年份的最后两位数字来创建一个用户名。对于其他人,我还将中间名的首字母包括在内,除此之外其它都使用了相同的逻辑。我将用户名称赋值到UserName字段上,这样,它就可以与其它的字段一样通过Row变量来读取了。
这就是添加一个Script组件到数据流上所需要的操作。在我们添加了代码之后,就可以关闭Visual Studio for Applications窗口以及Script Transformation编辑器。这样,我们就可以添加我们的目标组件了。
配置Flat File Destination组件
在我们添加了Flat File Destination组件之后,就连接从Script组件到目标的数据流路径,同时打开Flat File目标编辑器。现在添加一个指向文本文件的Flat File连接管理器。对于这个例子,我使用c:employees.txt,并将原来的4个字段和一个新的UserName字段映射到目标上。这里所有项我都使用了默认的设置。在我们完成了之后,关闭所有打开的编辑器并保存SSIS包。现在运行包。员工的信息——以及新的用户名——将被添加到文本文件中。
当然,此处我所探讨的方法只是一个非常基本的例子。然而,它确实可以演示添加自定义代码到SSIS需要的所有组件。你也可以尝试创建其它类型的脚本和添加脚本源和目标。而且你会发现,Script组件能够访问大量的Visual Basic.Net开发环境,并且还允许你扩展SSIS包来实现所需要的任何数据提取、转换和加载(ETL)。
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
SQL Server 2016 即将发布 你准备好了吗?
SQL Server 2016即将推出一系列全新的内置特性,并对数据库管理员所依赖的某些非常重要但十分单调的功能进行了改进。
-
SQL Server 2005支持服务结束 升级何去何从
SQL Server 2005的支持就要结束了,就在2016年4月12日,SQL Server 2005的客户们应该升级了。
-
SQL Server 2005即将终止服务 你准备好了么?
2016年4月12日,微软将正式终止SQL Server 2005相关服务。微软正在终止扩展支持,这意味着不再有新特性更新,什么都没了。
-
解决SQL服务器提示属性IsLocked不可用于登录用户的错误
在SQL Server中,权限的分配很重要。特别是在用户数量众多的数据库里面,用户权限,架构的划分经常会导致权限之间的冲突,导致无法登陆。