将Access数据库移植到SQL Server |
随着消费者关于企业级高性能数据库的需要的增进,消费者时常要从Microsoft Access Jet引擎的文件-服务器环境下转换到Microsoft SQL Server的客户-服务器环境 。Microsoft Office 2000中的Access 2000 Upsizing Wizard可实现将数据表和 查问转移到SQL Server 7.0中 。假如您用的是Access的较早的版本,您 可以先将它 晋级为Access 2000, 而后再 使用其中的Upsizing Wizard,从而将您的 利用移植到SQL Server中 。 假如您并不太情愿采纳Access 2000 和Upsizing Wizard来实现移植,本文 可以作为将Access 2000移植到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 95的机器上,它将被默许为客户方组件 。您将从SQL Server Manager的图形消费者界面中启动数据转移服务(DTS,Data Transformation Services) 。 数据转移服务(Data Transformation Services ,DTS) 数据转移服务同意您在多种异构数据源中间输入和输出数据,这些数据源采纳基于数据库的OLE体系 构造;或在 使用SQL Server 7.0的多个计算机中间转移数据库和数据库对象;您还 可以通过 使用数据转移服务,更便捷地在一个在线事务 解决系统(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脚本程序(Transact-SQL s cripts ) 事务 解决SQL语句通常是由数据库程序调用的,然而您也 可以 使用SQL Server 7.0中包括的SQL Server 查问 综合器直接运行它们 。SQL Server 查问 综合器可协助开发者测试事务 解决SQL语句,或运行那些执行 查问 解决、数据操作(插入, 批改,删除)和数据定义( 缔造表)的事务 解决SQL语句 。 存储过程(Stored procedures ) 开发者 可以将大 部分产生自Access 查问(搜索,插入, 批改,删除)的事务 解决SQL语句转移至存储过程 。用事务 解决SQL语句书写的存储过程 可以用来对您的数据存取打包,并使之 标准化,并且存储过程实际上是存储在数据库中的 。存储过程 可以带参数,也可不带参数, 可以由数据库程序调用或者由SQL Server 查问 综合器手动执行 。 视图(Views ) 视图是从一个或多个表中显示特定的行和列的 虚构表 。它们同意消费者 可以不直接执行组成 查问 根底的复杂衔接而 构建 查问 。视图不 支撑参数的 使用 。衔接多个数据表的视图不能用INSERT, UPDATE或 DELETE语句来 批改 。视图由事务 解决SQL语句调用,也可用于SQL Server 查问 综合器中运行的程序段 。SQL Server视图和SQL-92 标准不 支撑视图中的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 { [ 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 < SELECT, UPDATE, DELETE, INSERT, CREATE TABLE statement from Microsoft Access > GO CREATE VIEW GO 对每个Access 查问应执行: 打开Access, 而后在SQL Server中, 打开SQL Server 查问 综合器 。 在Access的数据库窗口中点击“Queries”tab键, 而后点击“Design”按钮 。 在“View”菜单上点击“SQL”按钮 。 将整个 查问粘贴到SQL Server 查问 综合器中 。 测试语法, 保留事务 解决SQL语句以备后用,或者在数据库中执行这些语句 。您 可以 取舍将事务 解决SQL语句 保留到一段脚本程序中 。 移植Microsoft Access 查问到事务 解决SQL语句 大 部分的Access 查问应该转换成存储过程和视图 。然而,有一些 利用程序开发者不太常用的语句 可以存储为事务 解决SQL脚本,一种以sql为文件 扩大名的文本文件 。 这些文件 可以在SQL Server 查问 综合器中运行 。 假如您打算将一些Access 查问转换为sql文件的话, 可以考量依据它们 使用的 模式有区别地将这些事务 解决SQL语句分别放在几个脚本程序中 。例如,您 可以将必须以同样频率运行的事务 解决SQL语句归类到同一个脚本中 。另一个脚本中则应包括全部只在某些条件下运行的事务 解决SQL语句 。此外,必须以 定然顺序执行的事务 解决SQL语句 该当归类到一个不延续的脚本中 。 将Access语句转移到事务 解决SQL 文件 将语句拷贝到SQL Server 查问 综合器中 使用蓝色的多选项图标 综合语句 在适当时候执行该语句 要执行Access中的 缔造表(MAKE TABLE)的 查问 使命的开发者在SQL Server中有几种 取舍 。开发者可 缔造下列对象之一: 一个视图 视图 存在动态的 虚构表的 动机,可提供近期的信息 。这是一个输入/输出强化器,由于每当发出一个 查问时它都要求对数据表重现 构建衔接 。 一个暂时表 暂时表为已衔接的消费者会话 构建一个快照 。您 可以 构建 部分的或全局的暂时表 。 部分暂时表只在目前会话中可见,而全局暂时表则在全部会话都是可见的 。在 部分暂时表的名字前外加单个数字的前缀((#table_name)),而在全局暂时表的名字前外加两位数字的前缀(##table_name) 。对暂时表的 查问执行起来十分快,由于它们 获得一个 后果集的时候通常只用一个表,而不是将多个表动态地衔接在一同来 。 如欲了解暂时表的 其余信息,请参阅SQL Server在线参考书 。 SQL Server 7.0中的数据转换服务(DTS)同意您通过 缔造包来实现暂时表 构建的 标准化、自动化和进度 调度 。例如,当您移植Access 2.0中的Northwind 范例数据库时,用于季度数据报表的 穿插表可改变为一个视图或者一个可在 标准 根底上 构建暂时表的数据转换 。如欲了解关于DTS的 其余信息,请参阅SQL Server在线参考书 。 其余设计上的考量 下面是当您将您的Access 利用移植到SQL Server时必须考量的一些 其余问题: 使用参数 带参数的SQL Server存储过程需要一种不同于Access 查问的语法 格局,例如: Access 2.0 格局: 查问名:Employee Sales By Country, in NWIND.mdb: PARAMETERS [Beginning Date] DateTime, [Ending Date] DateTime; SELECT Orders.[Order ID], [Last Name] & ", " & [First Name] AS Salesperson, Employees.Country, Orders.[Shipped Date], [Order Subtotals].Subtotal AS [Sale Amount] FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] ON Orders.[Order ID] = [Order Subtotals].[Order ID]) ON Employees. = Orders. WHERE (((Orders.[Shipped Date]) Between [Beginning Date] And [Ending Date])) ORDER BY [Last Name] & ", " & [First Name], Employees.Country, Orders.[Shipped Date]; SQL Server 7.0 格局: CREATE PROCEDURE EMP_SALES_BY_COUNTRY @BeginningDate datetime, @EndingDate datetime AS SELECT Orders.[Order ID], [Last Name] + ", " + [First Name] AS Salesperson, Employees.Country, Orders.[Shipped Date], [Order Subtotals].Subtotal AS [Sale Amount] FROM Employees INNER JOIN (Orders INNER J |