摘要本文描述了将Access数据库转换到SQL Server 数据库的过程和工具 简介 随着用户对于企业级高性能数据库的需求的增长用户时常要从Microsoft Access Jet引擎的文件服务器环境下转换到Microsoft SQL Server的客户服务器环境Microsoft Office 中的Access Upsizing Wizard可实现将数据表和查询转移到SQL Server 中如果您用的是Access的较早的版本您可以先将它升级为Access 然后再使用其中的Upsizing Wizard从而将您的应用移植到SQL Server中 如果您并不太愿意采用Access 和Upsizing Wizard来实现移植本文可以作为将Access 移植到SQL Server的一个指南转移一个Access上的应用首先需要将数据转移到SQL Server然后将查询转移进数据库或是转移为SQL文件以备稍后执行最后要采取的步骤是移植应用程序 数据库移植中用到的SQL Server 工具 SQL Server管理器(SQL Server Enterprise Manager) SQL Server管理器 允许对SQL Server以及SQL Server中的对象进行企业级的配置和管理SQL Server管理器提供一个强有力的scheduling引擎高度的容错力和一个嵌入式的复制管理界面使用SQL Server管理器可以实现以下功能 管理连接和用户许可 创建脚本程序 管理SQL Server对象的备份 备份数据和事务处理日志 管理表视图存储过程触发器索引规则默认值以及用户定义的数据类型 建立全文本索引数据库图表和数据库维护计划 输入和输出数据 转换数据 执行各种网络管理任务 在以Microsoft Windows NT为操作系统的计算机中SQL Server Manager由SQL Server Setup进行安装并被默认为服务器组件而在运行着Windows NT 和Microsoft Windows 的机器上它将被默认为客户方组件您将从SQL Server Manager的图形用户界面中启动数据转移服务(DTSData Transformation Services) 数据转移服务(Data Transformation Services DTS) 数据转移服务允许您在多种异构数据源之间输入和输出数据这些数据源采用基于数据库的OLE体系结构或在使用SQL Server 的多个计算机之间转移数据库和数据库对象您还可以通过运用数据转移服务更便捷地在一个在线事务处理系统(OLTP)中建立数据仓库和数据中心 DTS Wizard允许您交互地创建DTS包通过OLE DB和ODBC来输入输出验证和转移数据DTS Wizard还允许您在关系型数据库之间拷贝图解(schema)和数据 SQL Server 查询分析器(Query Analyzer) SQL Server 查询分析器是一种图形化的查询工具通过它您可以分析一个查询同时执行多个查询查看数据和获取索引建议SQL Server 查询分析器提供了showplan选项可用来显示SQL Server查询优化器所选择的数据提取方法 SQL Server Profiler SQL Server Profiler可以实时地捕获数据库服务器活动的连续记录SQL Server Profiler允许您监控SQL Server产生的事件过滤基于用户指定标准的事件或将操作步骤输出到屏幕文件或数据表运用SQL Server Profiler您可以重新执行所捕获的上一次操作这种工具可以帮助应用程序开发者识别那些可能会降低应用程序性能的事务处理在将一个基于文件体系结构的应用程序移植到客户/服务器结构中时该特性是很有用的因为它的最后一步包括对面向新的客户/服务器环境的应用程序进行优化 转移表和数据 使用DTS Wizard将您的Access数据转移到SQL Server可采取以下步骤 在 SQL Server Manager(Enterprise Manager)的工具菜单中鼠标指向Data Transformation Services 然后点击Import Data 在选择数据源( Choose a Data Source)的对话窗口中选择Microsoft Access为数据源然后输入您的.mdb文件名(mdb为文件扩展名)或者选择浏览文件 在选择数据目标(Choose a Destination)的对话窗口中选择Microsoft OLE DB Provider for SQL Server再选择好数据库服务器然后点击所需的认证模式 在指定表备份或查询( Specify Table Copy or Query)的对话窗口中点击拷贝表(Copy tables) 在选择数据源的对话窗口中点击选择所有项( Select All) 移植Microsoft Access查询 您可以将Access的查询以下面的格式之一转移至SQL Server中 事务处理SQL脚本程序(TransactSQL scripts ) 事务处理SQL语句通常是由数据库程序调用的但是您也可以使用SQL Server 中包含的SQL Server 查询分析器直接运行它们SQL Server 查询分析器可帮助开发者测试事务处理SQL语句或运行那些执行查询处理数据操作(插入修改删除)和数据定义(创建表)的事务处理SQL语句 存储过程(Stored procedures ) 开发者可以将大部分产生自Access查询(查找插入修改删除)的事务处理SQL语句转移至存储过程用事务处理SQL语句书写的存储过程可以用来对您的数据存取打包并使之标准化而且存储过程实际上是存储在数据库中的存储过程可以带参数也可不带参数可以由数据库程序调用或者由SQL Server查询分析器手动执行 视图(Views ) 视图是从一个或多个表中显示特定的行和列的虚拟表它们允许用户可以不直接执行构成查询基础的复杂连接而建立查询视图不支持参数的使用连接多个数据表的视图不能用INSERT UPDATE或 DELETE语句来修改视图由事务处理SQL语句调用也可用于SQL Server查询分析器中运行的程序段SQL Server视图和SQL标准不支持视图中的ORDER BY排序子句如欲了解事务处理SQL存储过程和视图的其他信息请参阅SQL Server 在线参考书 Access查询类型的SQL Server移植选择与建议 一个SELECT语句可以存储在事务处理SQL文件存储过程或是视图中建立存储过程是将数据库应用开发与数据库设计的物理实施分开的最佳方法存储过程可在一处创建而由应用程序调用 如果存储过程所基于的数据库变化了而存储过程经过仔细的修改以反应这些变化则对存储过程的调用将不会受到破坏 交叉表(CROSSTAB) 交叉表经常用于总结报表 一个Access的交叉表可以通过SQL程序段存储过程或视图中的事务处理SQL语句来执行每当发出一个查询时数据连接被重现执行以确保最近的数据得到使用 根据实际应用情况比较合适的方法是将交叉表中的数据存储为一个临时表(参考下面的MAKE TABLE)临时表对资源的需求比较少但是临时表在建立的同时只提供对数据的一个快照(snapshot) 创建表(MAKE TABLE) Access中的MAKE TABLE( 创建表)可以通过事务处理SQL脚本程序或存储过程中的事务处理SQL语言的建表语句CREATE TABLE来执行语法如下所示 SELECT [ ALL | DISTINCT ] [ {TOP integer | TOP integer PERCENT} [ WITH TIES] ] [ INTO new_table ] [ FROM {} […n] ] [ WHERE ] [ GROUP BY [ALL] group_by_expression […n] [ WITH { CUBE | ROLLUP } ] CREATE TABLE mytable (low int high int) UPDATE(修改) UPDATE语句可以存储在事务_SQL脚本程序中然而比较好地执行UPDATE语句的方法是创建一个存储过程 APPEND(添加) ALLEND语句可以存储在事务_SQL脚本程序中然而比较好地执行APPEND语句的方法是创建一个存储过程 移植Microsoft Access的查询到存储过程和视图 每个Access查询都必须用以下的一系列语句替换 CREATE PROCEDURE AS < SELECT, UPDATE, DELETE, INSERT, CREATE TABLE statement from Microsoft Access > GO CREATE VIEW AS GO 对每个Access查询应执行 打开Access然后在SQL Server中打开SQL Server查询分析器 在Access的数据库窗口中点击Queriestab键然后点击Design按钮 在View菜单上点击SQL按钮 将整个查询粘贴到SQL Server查询分析器中 测试语法保存事务处理SQL语句以备后用或者在数据库中执行这些语句您可以选择将事务处理SQL语句保存到一段脚本程序中 移植Microsoft Access查询到事务处理SQL语句 大部分的Access查询应该转换成存储过程和视图然而有一些应用程序开发者不太