今天遇到了软件老版本数据库升级的问题,想把客户在用的老版本数据库替换成新的,并且要把原来数据库中的文件导入到新的库中。一开始想用Sqlserver2005 来做,但居然没发现数据库导入导出菜单,后来上网查才知道原来Sqlserver2005 Express 版本中是不带数据库导入导出功能的。无奈只好再用DTS实现。
用DST实现数据导出方法很简单首先是选择数据源,选择附加他们原来所有数据库的服务器并选中对应的库,然后选择目的选择我要升级导入数据的库,然后是选择数据转换方法,我选择数据库对象间的复制和转换方法,一开想按默认操作进行总是失败,甚至想过导出中间文件再在新库中导入的方法最后都没成功,最后无奈之下在数据复制和转换时修改了一些默认设置,1.去掉创建目的对象下的首先出去目的对象和包括所有对象;2.复制数据改为追加数据,3去掉复制所有对象后单击后面的选择对象选择我只需要导出数据的表,4去掉默认选项,单击后面的选项去掉一些主外键关联,然后分了几次导出数据,最终勉强成功。
下来又搜索一些DTS相关资料如下:
DTS 是一组工具,用于在一个或多个数据源(如 Microsoft SQL Server、Microsoft Excel 或 Microsoft Access)间导入、导出和转换各种数据。通过 OLE DB(一种数据访问的开放式标准)提供连接, 通过用于 ODBC 的 OLE DB 提供程序来支持 ODBC(开放式数据库连接)数据源。
可以将 DTS 解决方案创建为一个或多个软件包。每个软件包可包含一组已安排好的任务,它们定义要执行的工作、对数据和对象的转换、定义任务执行的工作流约束条件以及数据源和目标间的连接方式。DTS 软件包还提供一些服务,如记录软件包执行详细情况、控制事务和处理全局变量。
以下工具可用于创建和执行 DTS 软件包:
• 导入/导出向导用于生成相对简单的 DTS 软件包,并支持数据移植和简单转换。
• DTS 设计器以图形方式来实现 DTS 对象模型,可用于创建具有一系列功能的 DTS 软件包。
• DTSRun 是用于执行现有 DTS 软件包的命令提示实用程序。
• DTSRunUI 是 DTSRun 的图形界面,可以传递全局变量以及生成命令行。
• SQLAgent 不是 DTS 应用程序,DTS 将其用于安排软件包的执行。
使用 DTS 对象模型还可以用编程方式创建和运行软件包,生成自定义任务和自定义转换。
SQL Server提供了丰富的数据导入导出方法,这给我们提供了更多的选择,但是这又会给我们带来一个新问题:如何根据具体情况选择合适的数据导入导出方法呢?如果是在SQL Server数据库之间进行数据导入导出时,并且不需要对数据进行复杂的检验,最好使用Transact-SQL方法进行处理,因为在SQL Server数据库之间进行数据操作时,SQL是非常快的。当然,如果要进行复杂的操作,如数据检验、转换等操作时,最好还是使用DTS进行处理,因为DTS不光导数据效率高,而且能够对数据进行深度控制。但是DTS的编程接口是基于com的,并且这个接口十分复杂,因此,使用程序调用DTS将变也会变得很复杂,因此, 当数据量不是很大,并且想将数据导入导出功能加入到程序中,而且没有复杂的数据处理功能时,可以使用OPENDATASOURCE或OPENROWSET进行处理。BCP命令并不太适合通过程序来调用,如果需要使用批量的方式导数据,可以通过批处理文件调用BCP命令,这样做即不需要编写大量的程序,也无需在企业管理器中通过各种操作界面的切换来进行数据导入导出。因此,它比较适合在客户端未安企业管理器或使用SQL Server Express时对数据进行快速导入导出的场合。
DTS正在逐渐淡出SQL Server 2005,它将会被一种新品牌的称为SQL Server集成服务(SSIS)的抽取、传输和载入(ETL)引擎所取代。SQL Server 集成服务为构建一种比DTS更好的ETL解决方案提供了一个更为强大、灵活和更好的执行基础,在SQL Server 2000中创建的DTS包仍然可以运行。为了简化这个转换过程,SQL Server 2005提供了一个升级向导来帮助数据库管理员将包转换为SSIS框架。然而,并不是所有的组件都可以被升级。例如,ActiveX的转换对于升级向导来说就是一项挑战,有可能是不能移植的。然而这意味着数据库管理员们最终必须要用SSIS重新编写这些包,在这样做的过程中有可能要比使用DTS容易得多,这都要感谢SSIS提供的功能。