通过编写脚本和程序来扩展SSIS包

日期: 2009-07-08 作者:Serdar Yegulalp翻译:曾少宁 来源:TechTarget中国 英文

SQL Server整合服务(SSIS)是微软在SQL Server 2005中引入的数据转换服务(DTS)的替代物,它加载了大量不同的组件来导入数据和将数据转换为实际数据,而不仅仅是被动地导入。但是,这里有一个问题,即使是新的SSIS工具也无法包括所有我们需要做的工作。   因此,微软提供了两个基本的方法来扩展SSIS的功能。其中一个方法是相对简单的,适用于没有很多的编程经验,也不想要编写复杂逻辑的用户;而另一个方法是较复杂的,它允许更有经验的程序员深入研究SSIS和更广泛的扩展SSIS。

  简单的方法:脚本   大多数人可能或多或少地熟悉脚本技术,并且SSIS使用VB.NET来允许程序员……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

SQL Server整合服务(SSIS)是微软在SQL Server 2005中引入的数据转换服务(DTS)的替代物,它加载了大量不同的组件来导入数据和将数据转换为实际数据,而不仅仅是被动地导入。但是,这里有一个问题,即使是新的SSIS工具也无法包括所有我们需要做的工作。

  因此,微软提供了两个基本的方法来扩展SSIS的功能。其中一个方法是相对简单的,适用于没有很多的编程经验,也不想要编写复杂逻辑的用户;而另一个方法是较复杂的,它允许更有经验的程序员深入研究SSIS和更广泛的扩展SSIS。

  简单的方法:脚本

  大多数人可能或多或少地熟悉脚本技术,并且SSIS使用VB.NET来允许程序员在SSIS包中用脚本编写行为。与自定义对象相反,脚本的范围是小而精的;它是用于我们对现有数据包允许或者已经实现的上下文进行一定修改的。

  在SSIS数据包中,有两个元素我们可以用来添加脚本处理:Script Task(在Integration Services Designer应用的Control Flow窗口)以及Script Component(在Data Flow窗口)。每一个都最好在稍微有点不同的环境中使用。

  Script Task是更适合用于软件包中通用目的的Flow Control——它比Script Component更全局化更强大,但是也复杂得多。它在软件包的Data Flow之外运行,并且不受Data Flow工作方式的限制,虽然Script Task一般只当一个软件包被触发的时候才运行(虽然我们可以特别地编译)。Task同样支持断点和调试,当我们编写一个带有控制逻辑或者执行某些决策的相当复杂的脚本时,这些是非常有用的。例如,Script Task可以查询Active Directory获取一些信息或者与另外一个数据知识库进行数据交互——两者都可以在运行一个包之前进行。

  Script Component与Data Flow运作的方式结合得更紧密。Script Component不是在整个包运行一次,它的主要过程是为每个正在处理的数据行运行一次。Script Components也同样有3个基本的运行上下文:数据源、数据转换或者数据目的地。Component也同样比较少交互——比如,它并不支持Script Task那样的调试。Script Component的最主要用途包括诸如一行行地数据转换、编译一个自定义ODBC目标、实时错误处理或者不通过原SSIS方法处理的转换操作。

  高级方法:自定义对象编程

  虽然脚本在SSIS包中的功能已经强大,但是,有时候它还是没有办法完成某些任务。在某些情况下,我们必须从头开始编写(或者让某人编写)一个自定义SSIS扩展。这并不是一件容易的事情;它要求对编程有全面的理解。但是,通过自定义的对象,我们可以使用SSIS进行远比简单自动化任务复杂的事情。

  比如,如果我们有一个不能支持任何现有SSIS转换的数据源(例如,有些奇怪的专有数据源),那么我们可以写入一个自定义的连接管理对象来像使用本地数据源一样使用该数据。与此类似的是,我们可以用由SSIS提供的相同的程序库来创建自定义任务、日志组件或者数据流组件。

  上面每个类型的项目都是可以作为SSIS所支持语言的一个基类、属性和方法集:Visual Basic、C#、C++、J# 和 Jscript. C++、C# 和VB都倾向于创造最好的结果,因为在这些上下文中它们都倾向于由开发人员和供应商两者同时广泛支持。关键在于我们所使用的语言不能是一个阻碍;它们都可以插入相同的对外编程接口中。我们同时也可以在需要的时候通过标准Windows形式创建自定义对象的用户接口。

  SSIS自定义对象可以创建的一个极其强大的自定义Foreach遍历器。假设你需要创建一套编程类来为一个集合中每个对象执行特定的操作,比如数据库中的表。如果你想在大量的上下文中执行这个操作而不重复编写代码,那么这是其中的一个最佳方法。特别是当你已经对一些新的数据类型创建了一个自定义的连接管理器(与上面的例子一样),并且想创建一个自定义foreach操作来处理时,这种方法是非常有用的。

  总结

  我们所选择的扩展SSIS的方法,不管是脚本或者是编程,都是可以根据我们的需要和能力而决定的。因为,我们可以使用这两种方法——甚至是同时使用!——我们并不需要为我们手头上的任务做额外的工作。我们也可以按照要求混合使用。

  关于更多的例子,当然,你可以查看上面的连接(直接连接到微软的SSIS包扩展文档),虽然它们主要阐述具体的实现和例子。同时,还有一些关于这个主题的博客:例如,Peter DeBetta's SQL Programming Blog。我也可以推荐阅读SSIS Junkie博客,这些上面的文章都有关于如何在SSIS中实现这些方法(包括编程和其它的)的探讨。

作者

Serdar Yegulalp
Serdar Yegulalp

Serdar Yegulalp从1994年到2001年为Windows杂志写作,覆盖了广泛的技术方面。他现在是《The Windows 2000 Power Users Newsletter》一书的出版者,辛勤钻研他擅长的Windows NT, Windows 2000 and Windows XP领域,并为TechTarget写专栏。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐