任务:包中的定义步骤
DTS 包通常包括一个或多个任务。每个任务都定义一个可在包执行过程中执行的工作项目。可以使用任务执行下列操作:
| • |
 |
“转换数据”任务
|
用来在源和目标之间移动数据,以及对数据应用列级转换(可选)。
|
 |
“转换数据”任务
|
用来在源和目标之间移动数据,以及对数据应用列级转换(可选)。
|
 |
“数据驱动查询”任务
|
用来对数据执行灵活的基于 Transact-SQL 的操作,其中包括存储过程以及 INSERT、UPDATE 或 DELETE 语句。
|
“并行数据抽取”任务1“并行数据抽取”任务只能以编程方式使用,它除了执行与“转换数据”和“数据驱动查询”任务相同的功能外,还支持按照 OLE DB 2.5 及更高版本定义的方式划分的行集。
|
| • |
 |
“批量插入”任务
|
用来将大量数据快速加载到 SQL Server 表或视图中。
|
 |
执行 SQL”任务
|
用来在包执行过程中运行 SQL 语句。“执行 SQL”任务还可以保存作为查询结果的数据。
|
 |
“复制 SQL Server 对象”任务
|
用来将 SQL Server 对象从 SQL Server 的一个安装或实例复制到另一个。可以复制对象(例如,数据和表)以及对象的定义(例如,视图和存储过程)。
|
 |
“传输数据库”任务
|
用来将 SQL Server 数据库从一个 SQL Server 7.0 版或 SQL Server 2000 实例移动或复制到另一个 SQL Server 2000 的实例。
|
 |
“传输错误消息”任务
|
用来将 sp_addmessage 系统存储过程所创建的用户指定的错误消息,从一个 SQL Server 7.0 或 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。
|
 |
“传输登录”任务
|
用来将登录从一个 SQL Server 7.0 或 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。
|
 |
“传输作业”任务
|
用来将作业从一个 SQL Server 7.0 或 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。
|
 |
“传输主存储过程”任务
|
用来将存储过程从一个 SQL Server 7.0 或 SQL Server 2000 实例上的主数据库复制到另一个 SQL Server 2000 实例上的主数据库
|
|
| • |
 |
“批量插入”任务
|
用来将大量数据快速加载到 SQL Server 表或视图中。
|
 |
执行 SQL”任务
|
用来在包执行过程中运行 SQL 语句。“执行 SQL”任务还可以保存作为查询结果的数据。
|
 |
“复制 SQL Server 对象”任务
|
用来将 SQL Server 对象从 SQL Server 的一个安装或实例复制到另一个。可以复制对象(例如,数据和表)以及对象的定义(例如,视图和存储过程)。
|
 |
“传输数据库”任务
|
用来将 SQL Server 数据库从一个 SQL Server 7.0 版或 SQL Server 2000 实例移动或复制到另一个 SQL Server 2000 的实例。
|
 |
“传输错误消息”任务
|
用来将 sp_addmessage 系统存储过程所创建的用户指定的错误消息,从一个 SQL Server 7.0 或 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。
|
 |
“传输登录”任务
|
用来将登录从一个 SQL Server 7.0 或 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。
|
 |
“传输作业”任务
|
用来将作业从一个 SQL Server 7.0 或 SQL Server 2000 实例复制到另一个 SQL Server 2000 实例。
|
 |
“传输主存储过程”任务
|
用来将存储过程从一个 SQL Server 7.0 或 SQL Server 2000 实例上的主数据库复制到另一个 SQL Server 2000 实例上的主数据库
|
|
1 SQL Server 2000 中的新增功能。
2 2 只有安装了 SQL Server 2000 分析服务的情况下才可用。
您还可以通过编程方式创建自定义任务,然后使用“注册自定义任务”命令将它们集成到 DTS 设计器中。
为了阐释这些任务的使用,这里有一个简单的 DTS 包,其中具有下列两个任务:“Microsoft ActiveX? 脚本”任务和“发送邮件”任务:
图 2. 具有两个任务的 DTS 包
“ActiveX 脚本”任务可以承载任何“ActiveX 脚本”引擎,其中包括 Microsoft Visual Basic Scripting Edition (VBScript)、Microsoft JScript? 或 ActiveState ActivePerl,这些引擎可从 http://www.activestate.com 下载。“发送邮件”任务可以发送一条表明包已经运行的消息。请注意,这些任务没有顺序。当包执行时,“ActiveX 脚本”任务和“发送邮件”任务会同时运行。
工作流:设置任务优先顺序
定义一组任务时,这些任务通常应该按照某种顺序执行。当任务按顺序执行时,每个任务就成为了过程中的一个步骤。在 DTS 设计器中,可以在 DTS 设计器设计表中操作任务,并使用优先约束控制任务的执行顺序。
优先约束按顺序链接包中的任务。下表显示了可以在 DTS 中使用的优先约束的类型。
|
完成时(蓝色箭头)
|
如果想让任务 2 等待任务 1 完成(无论结果如何),则可以使用“完成时”优先约束将任务 1 链接到任务 2。
|
|
成功时(绿色箭头)
|
如果想让任务 2 等待任务 1 成功完成,则可以使用“成功时”优先约束将任务 1 链接到任务 2。
|
|
成功时(绿色箭头)
|
如果想让任务 2 只在任务 1 无法成功执行时开始执行,则可以使用“失败时”优先约束将任务 1 链接到任务 2。
|
下图显示了带有“完成时”优先约束的“ActiveX 脚本”任务和“发送邮件”任务。当“Active X 脚本”任务完成(无论成功或失败)时,“发送邮件”任务运行。
图 3. 带有“完成时”优先约束的“ActiveX 脚本”任务和“发送邮件”任务
可以配置两个单独的“发送邮件”任务,一个用于“成功时”约束,另一个用于“失败时”约束。这两个“发送邮件”任务可以根据 ActiveX 脚本的成功或失败发送不同的消息。
图 4. 邮件任务
您还可以对一个任务发出多个优先约束。例如,“发送邮件”任务“管理通知”可以同时具有来自脚本 #1 的“成功时”约束和来自脚本 #2 的“失败时”约束。在这些情况下,DTS 采用逻辑“与”关系。因此,要使得“管理通知”消息能够得以发送,脚本 #1 必须成功执行,而脚本 #2 必须失败。
图 5. 一个任务上多个优先约束的示例
数据抽取:转换数据
DTS 数据抽取是用来驱动数据的导入、导出和转换的 DTS 对象。将在“转换数据”、“数据驱动查询”和“并行数据抽取”任务的执行过程中使用数据抽取。这些任务是通过下列操作完成的:对源和目标连接创建行集,然后创建数据抽取的一个实例以在源和目标之间移动行。对于每行的转换在复制该行时进行。
在下图的步骤 2 中,Access 数据库任务和 SQL 产品数据库任务之间使用了“传输数据”任务。“传输数据”任务是两个连接之间的灰色箭头。
图 7.“传输数据”任务的示例
要定义从源连接收集的数据,可以为传输任务生成一个查询。DTS 支持参数化的查询,使您可以在执行查询时定义查询值。
您可以在任务的属性对话框中键入查询,也可以使用“数据转换服务查询设计器”,“数据转换服务查询设计器”是一个用于以图形方式为 DTS 任务生成查询的工具。在下图中,使用“查询设计器”生成了一个联接 pubs 数据库中三个表的查询。
图 8.“数据转换服务查询设计器”界面(单击可以放大)
在转换任务中,还可以定义对数据的任何更改。下表描述了 DTS 提供的内置转换。
|
复制列
|
用来将数据直接从源列复制到目标列,而不对数据应用任何转换。
|
|
ActiveX 脚本
|
用来生成自定义转换。请注意,由于转换是以逐行为基础发生的,所以 ActiveX 脚本可能会影响 DTS 包的执行速度。
|
|
Datetime 字符串
|
用来将源列中的日期或时间转换为目标列中的其他格式。
|
|
小写字符串
|
用来将源列转换为小写字符,如果需要,则转换为目标数据类型。
|
|
大写字符串
|
用来将源列转换为全部大写字符,如果需要,则转换为目标数据类型。
|
|
字符串中间部分
|
用来从源列提取子字符串,对其进行转换,然后将结果复制到目标列。
|
|
剪裁字符串
|
用来从源列中的字符串删除起始空格、尾随空格和嵌入空格,并将结果复制到目标列。
|
|
读取文件
|
用来打开某一文件(其名称在源列中指定)的内容,并将这些内容复制到目标列。
|
|
写入文件
|
用来将源列(数据列)的内容复制到第二个源列(文件名列)指定其路径的某个文件中。
|
您还可以以编程方式创建自己的自定义转换。生成自定义转换的最快方法是使用活动模板库 (ATL) 自定义转换模板,该模板包括在 SQL Server 2000 DTS 示例程序中。
在 SQL Server 2000 中可以使用一种记录转换错误的新方法。您可以定义可在包执行过程中使用的三个异常日志文件:错误文本文件、源错误行文件和目标错误行文件。
| • |
|
| • |
如果转换失败,则源行有错误,该行会写入到源错误行文件。
|
| • |
如果插入失败,则目标行有错误,该行会写入到目标错误行文件。
|
执行日志文件是在转换数据的任务中定义的。每个转换任务都有其自己的日志文件。
默认情况下,数据抽取有一个阶段:行转换。此阶段是您在“转换数据”任务、“数据驱动查询”任务和“并行数据抽取”任务中映射列级转换而没有选择阶段时,进行配置的阶段。
现在 SQL Server 2000 中新增了多个数据抽取阶段。通过在 SQL Server 企业管理器中选择多阶段数据抽取选项,可以在数据抽取操作过程中的几个点访问数据抽取,还可以添加功能。
将一行数据从源复制到目标时,数据抽取遵循下图中显示的基本过程。
数据抽取处理了最后一行数据后,任务完成,数据抽取操作终止。
想要向包添加功能以便它支持任何数据抽取阶段的高级用户,可以通过执行下列操作完成此目标:
| • |
为要自定义的每个数据抽取阶段编写一个 ActiveX 脚本阶段函数。如果使用 ActiveX 脚本函数来自定义数据抽取阶段,就不需要包之外的任何其他代码了。
|
| • |
在 Microsoft Visual C++? 中创建 COM 对象,以自定义选定的数据抽取阶段。开发不属于此包的程序,并对于转换的每个选定阶段调用此程序。此方法与访问数据抽取阶段的 ActiveX 脚本方法不同,它提供了在数据抽取任务执行时由多个数据抽取阶段调用的一个入口点,而后者则对每个选定阶段使用不同的函数和入口点。
|