比较脚本任务和脚本组件
脚本任务在 Integration Services 设计器的“控制流”窗口中,脚本组件在“数据流”窗口中,它们在 Integration Services 包中的用途非常不同。任务是一般用途的控制流工具,而组件用作数据流中的源、转换或目标。尽管它们的用途不同,但是脚本任务和脚本组件在所使用的编码工具和在包中供开发人员使用的对象方面还是有一些相似之处的。了解它们的相似与不同之处有助于您更有效地使用任务和组件。
脚本任务和脚本组件之间的相似之处
脚本任务和脚本组件有以下相同特性。
功能 |
说明 |
---|---|
两个设计时模式 |
在任务和组件中,都是从在编辑器中指定属性开始,然后切换到开发环境编写代码。 |
MicrosoftVisual Studio Tools for Applications (VSTA) |
任务和组件都使用相同的 VSTA IDE,并且支持在 MicrosoftVisual Basic 2008 或 MicrosoftVisual C# 2008 中编写代码。 |
预编译的脚本 |
在 SQL Server 2008 Integration Services (SSIS) 中,所有脚本都要进行预编译。在早期版本中,您可以指定是否对脚本进行预编译。 脚本被预编译为二进制代码会使执行更加快速,但代价是会增加包大小。 |
脚本任务和脚本组件之间的不同之处
脚本任务和脚本组件有以下值得注意的不同之处。
功能 |
脚本任务 |
脚本组件 |
---|---|---|
控制流/数据流 |
脚本任务在设计器的“控制流”选项卡中配置,在包的数据流外部运行。 |
脚本组件在设计器的“数据流”页中配置,表示数据流任务中的源、转换或目标。 |
用途 |
脚本任务可完成几乎所有一般用途的任务。 |
必须指定是否要使用脚本组件创建源、转换或目标。 |
执行 |
脚本任务在包工作流中的某个点运行自定义代码。除非将其放在循环容器或事件处理程序中,否则它只运行一次。 |
脚本组件也运行一次,但是通常它为数据流中的每行数据运行一次主处理例程。 |
编辑器 |
“脚本任务编辑器”有三个页面:“常规”、“脚本”和“表达式”。只有 ReadOnlyVariables、ReadWriteVariables 和 ScriptLanguage 属性会直接影响您能够编写的代码。 |
“脚本转换编辑器”最多有四个页面:“输入列”、“输入和输出”、“脚本”和“连接管理器”。在其中每个页面上配置的元数据和属性将决定自动生成以供您在编码中使用的基类的成员。 |
与包交互 |
在为脚本任务编写的代码中,使用 Dts 属性访问包的其他功能。Dts 属性是 ScriptMain 类的成员。 |
在脚本组件代码中,使用类型化的取值函数属性访问特定包功能,如变量和连接管理器。 PreExecute 方法仅可访问只读变量。PostExecute 方法既可以访问只读变量,又可以访问读/写变量。 有关这些方法的详细信息,请参阅脚本组件的编码和调试。 |
使用变量 |
脚本任务使用 Dts 对象的 Variables 属性访问具备任务的 ReadOnlyVariables 和 ReadWriteVariables 属性的变量。例如: |
脚本组件使用自动生成的基类的类型化取值函数属性,这些属性基于组件的 ReadOnlyVariables 和 ReadWriteVariables 属性创建。例如: |
使用连接 |
脚本任务使用 Dts 对象的 Connections 属性访问在包中定义的连接管理器。例如: |
脚本组件使用自动生成的基类的类型化取值函数属性,这些属性基于用户在编辑器的“连接管理器”页上输入的连接管理器列表创建。例如: |
引发事件 |
脚本任务使用 Dts 对象的 Events 属性引发事件。例如: |
脚本组件使用 ComponentMetaData 属性返回的 IDTSComponentMetaData100 接口的方法引发错误、警告和信息性消息。例如: |
日志记录 |
脚本任务使用 Dts 对象的 Log 方法将信息记录到已启用的日志提供程序。例如: |
脚本组件使用自动生成的基类的 Log 方法将信息记录到已启用的日志提供程序。例如: [Visual Basic] Dim bt(0) As Byte Me.Log("Test Log Event", _ 0, _ bt) |
返回结果 |
脚本任务使用 Dts 对象的 TaskResult 属性和可选的 ExecutionValue 属性通知运行时其结果。 |
脚本组件作为数据流任务的组成部分运行,不会使用这两个属性中的任何一个报告结果。 |
调试 |
脚本任务支持在设计环境中进行调试时设置断点和单步执行代码。
注意
当调试一个包含多个脚本任务的包时,调试器将只命中其中一个脚本任务中的断点,而将忽略其他脚本任务中的断点。如果脚本任务是 Foreach 循环容器或 For 循环容器的一部分,则调试器将在循环的第一次迭代之后忽略脚本任务中的断点。
|
脚本组件不支持调试。有关详细信息,请参阅脚本组件的编码和调试中的“调试脚本组件”。 |
|