一、DTS包的组成部分
DTS包由四部分组成。
1. DTS 连接
在进行数据转换之前,必须先打开数据源,即源连接和目的连接。DTS连接可以打开任何提供OLD DB Provider的数据库,如SQL Server、Oracle、Access等,也支持一些常用的数据库,如dbase、foxpro、excel等,还支持Unicode和ANSI 格式的文本文件。值得注意的是,DTS连接是单线程的,这就意味着同一时刻每个连接只能运行一个任务,如果要提高性能的话,可以对同一个数据源建立多个连接。
2. DTS 任务
在建立不同的连接后,要做的就是将这些连接关联起来,而这些所谓的关联就是从一个连接到另一个连接的通道,数据在这些通道中被加工处理,而这些加工具处理的过程就是DTS任务。一个DTS包可以建立多个任务,甚至在两个连接之间也可以建立多个不同配置的任务。
3. DTS转换
在DTS任务中对字段的一次处理,可以称为一个转换。也就是说,转换是发生在DTS任务中的。在DTS任务中,一般是在源连接和目的连接之间进行相应字段之间的赋值操作,更复杂的可以使用VBScript或JScript对源连接中的字段进行检验、净化等操作后,再赋给目的连接的字段。因此,也可以将DTS转换看成是字段级的操作。
4. DTS包工作流
由于在DTS包中可以建立多个任务,这就有一个先执行谁,后执行谁的问题。如任务2必须在任务1执行成功后才能执行,如果任务1执行失败,则执行任务3。从这一点看,DTS包工作流有点像条件判断语句。
1. 通过导入导出向导建立
导入导出向导可以从数据库、表或是数据转换服务等处的弹出菜单中的导入数据、导出数据中运行。在启动后,首先得选择源连接和目的连接,然后可以从简单到复杂对源连接中的表或视图进行三种选择。
(1) 直接选择表或视图。
(2) 通过SQL语句对表或视图进行过滤。
(3) 复制源连接中的对象(包括索引、存储过程、约束等信息)。
以上过程中可以通过脚本语言对每一个字段进行单独处理。
在最后可以选择保存“DTS包选项”。DTS包可以以4种形式保存。
(1) SQL Server(保存在SQl Server中的msdb数据库中)
(2) SQL Server Meta Data Services
(3) 结构化存储文件
(4) Visual basic文件
这种建立DTS包的方式是一种简易的方式,它只能建立一对连接,并可以将这个包以上述的4种形式保存。要想更深层次地控制包,可以使用下述的方法。
2. 在数据转换服务中的本地包中建立
在本地包中选择“新建包”,可以启动DTS包生成器。在左侧面板上是可供选择的连接和任务。读者可以打开上面保存的“新建包”,打开后里面只有刚才建立的两个连接和一个任务。如果想继续增加连接和任务,可以通过选择左侧的连接和任务完成。
当DTS包中含有多个任务时,就需要建立DTS包工作流了。可以通过任务的弹出菜单中的“工作流属性”设置任务的执行先后顺序。当一个任务执行时,可以有3种选择是否执行下面的任务。
(1) 任务成功后执行。
(2) 任务失败后执行。
(3) 任务完成后,不管成功还是失败,都执行下面的任务。
三、如何调用DTS包
一般有4种方式执行DTS包。
1. 在Enterprise Manager中执行。
这种方式使用得最为广泛。在导入导出向导中,如果在最后一步选中“立即执行”,就可以执行当前建立的包。在本地包中选择“执行包”,同样也可以执行保存后的包。当然,还可以使用“调度包管理”定期执行相应的包。
2. 使用命令行工具dtsrun执行DTS包。
dtsrun是SQL Server提供的一个用来执行保存在SQL Server中或是保存成文件的DTS包的一个工具。它的参数比较复杂,读者可以查阅相关的资料。在这里只举几个例子说明如何使用dtsrun。
执行结构化存储文件DTS包
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> dtsrun / Ffilename / Npackage_name / Mpackage_password
执行保存在SQL Server msdb数据库中的DTS包
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> dtsrun / Sserver_name / Uuser_nName / Ppassword / Npackage_name / Mpackage_password
执行保存在Meta Data Services中的DTS包
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> dtsrun / Sserver_name / Uuser_nrame / Ppassword / Npackage_name / Mpackage_password / Rrepository_name
3. 使用图形界面工具dtsrunui执行DTS包。
使用这个工具非常简单,它没有任何参数,只需在控制台中输入dtsrunui并执行后,就会出现一个操作界面,只需要按提示输入相应的信息,并选择相应的DTS包执行即可。
4. 通过程序调用DTS包。
由于DTS提供了COM接口,因此,可以通过它所提供的COM组件中的Execute方法来执行DTS包。
DTS的COM组件非常复杂,在这里只给出了使用VB如何执行DTS包的程序片段以供参考。
一般可分为4步设计这个程序。
(1) 声明变量。
在这里需要声明4个类型的变量。DTS.Package2、DTS.Step、DTS.Task和DTS.ExecutePackageTask。
(2) 初始化变量。
除了DTS.Package变量需要使用Set Package1 = new DTS.Package实例化外,其它的变量需要Package1实例进行初始化。
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> Set Step1 = Package1.Steps.New ' 建立一个新步骤 Set Task1 = Package1.Tasks.New("NewTask") ' 建立一个新任务 Set Exec1 = Task1.CustomTask Exec1.FileName = "abc.dts" ' 用于执行以结构化存储的DTS包 Exec1.Name = "ExecTask" Step1.TaskName = Exec1.Name Step1.Name = "Step1" Step1.ExecuteInMainThread = true Package1.Steps.Add Step1 Package1.Tasks.Add Task1
(3) 执行DTS包。
只需要执行一条语句即可:Package1.Execute
(4) 释放引用
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> Set Exec1 = Nothing Set Task1 = Nothing Set Step1 = Nothing Package1.UnInitialize ' 调用UnInitialize方法释放包 Set Package1 = Nothing