将现有的Access数据库升级为SQL

将现有的Access数据库升级为SQL,第1张

将现有的Access数据库升级为SQL,第2张

许多Access和SQL Server开发人员经常面临将Access数据库升级到SQL Server数据库的问题。由于现有的Access升级向导,这种转换的过程将变得非常简单,尤其是当您设置一个链接到SQL Server数据的ADP时。然而,该指南并不完善,仍有许多问题有待解决。

首先,有些对象不是简单的升级,你要人为处理。其次,如果在升级之前没有做好准备,许多Access功能(如一些查询类型、对象和特定数据类型)将会导致错误。现在,我们来讨论一下数据库升级过程中可能面临的问题。我将提供一些可以解决问题的通用指导方法。最后,你必须花一些时间和精力将这些知识应用到开发中。

什么不能升级?
在处理实际问题之前,我们先来看看不能随意升级的对象。它们包括以下:
跨表查询
任何包含SQL DISTINCTROW关键字的查询
所有隐藏对象
表数据作为参数的查询(这些表可以升级,但不能正确运行)
传递查询
数据定义语言查询(如CREATE TABLE、ALTER TABLE、DROP statement)
这些访问对象需要特殊处理。具体来说,您将构建一个类似的SQL Server对象。此外,SQL Server不支持Jet安全功能,因此您必须使用Windows身份验证和/或SQL Server安全机制。

Included problems
在数据库升级之前,如果你已经知道错误会出现在哪里以及如何处理,那么在数据库升级过程中出现错误的可能性就会大大降低。对于数据库升级,我能提供的建议是在开发前制定最完整的计划。现在,我将列出数据库升级过程中可能出现的问题——如果你之前没有做好准备的话。

不支持的日期

Access和SQL Server在日期方面有很大的区别。Access支持大范围的日期,从100年1月1日到9999年12月31日。相反,SQL Server支持的日期是从1753年1月1日到9999年12月31日。数据库升级向导无法升级包含SQL Server不支持的日期的表。这意味着您必须在升级前手动处理这些日期。幸运的是,这个问题只影响少数数据库。
与表控制相关的查询
开发人员通常使用表控制的查询来限制或查询数据源。表格可以为在特定报告中显示数据提供多种选择。例如,SQL SELECT语句包含用户的输入:
SELECTORDS。要求的日期,ORDS。发货日期,ORDS。运费,
ORDS。ORDS托运人姓名。发货地址,订单。OrderDate
FROM Orders
WHERE
Orders。[表单]之间的订单日期![日期过滤器]![日期和形式]![日期过滤器]![DateTo]));
为了限制报告中的数据,用户可以在列表中输入开始和结束日期(开始日期和结束日期)。其他代码可以打开并显示符合用户输入的两个日期之间的记录。
因为这个查询方法是Jet处理的,所以表单中的问题可以很快解决。但数据库升级时,SQL Server不涉及表控制,结果通常是查询失败。为了纠正这种查询方法,开发人员必须更改该表。我建议您使用输入参数属性,并将值传递给SQL Server存储程序。
交叉表查询
SQL Server不支持Jet TRANSFORM语句——该语句可以实现交叉表查询。例如,数据库升级向导支持以下查询方法:
Transform sum(ccur([订单详细信息])。单价*[数量]*(1-[折扣])/100) * 100)
作为产品金额
选择产品。产品名称,订单。CustomerID,Year([OrderDate])作为OrderYear
,来自订单上的产品内部联接(订单内部联接[订单详细信息]
。OrderID =[订单详细信息]。OrderID)。product id =
[订单详细信息]。ProductID
WHERE Orders。订购日期介于#1/1/1997#和#12/31/1997#
按产品分组。产品名称,订单。CustomerID,Year([OrderDate])
PIVOT " Qtr " & DatePart(" q ",[OrderDate],1,0) In ("Qtr 1 "," Qtr 2 "," Qtr 3 "," Qtr 4")

幸运的是,您不需要在SQL Server中使用Transact-SQL (T-SQL) CASE关键字重写Access交叉表查询。以下SELECT语句描述了使用T-SQL重新建立交叉表查询的语法:
SELECT customers . customerid,Customers。CustomerName
SUM(订单时的情况。Orderdate介于' 01-Jan-1990 '和' 31-Dec-1996 '
Then[unit price]*[Quantity]Else 0 End)as 1997)
from customerid = orders . customerid上的客户内部联接订单


隐藏对象
在数据库升级过程中将忽略所有隐藏对象。要解决这个问题,您应该使用program对象的GetHiddenAttribute属性来检查对象。例如,下面的代码使用此方法来确定对象是否隐藏。
dim IsHidden为布尔值
if application。gethiddenattribute (objtype,objname)then
ishidden = True
end If
如果某个特定对象被隐藏,is hidden布尔变量将被设置为True。
有索引的表

数据库升级向导不支持没有索引或其他限制的表。升级向导可以升级未编制索引的表,但它在转换后只能成为只读表。幸运的是,这个问题的解决方案很简单:为每个没有索引的表添加一个索引。完成数据库升级后,请记得删除添加的索引。

升级数据库操作步骤
一旦做好了所有准备,并确保操作可以开始。数据库升级向导可以为您提供三个选项:
将Access表导出到SQL Server并链接到Access数据库
使用传递查询与SQL Server后端服务器的表进行通信
将整个Access数据库移动到一个Access数据库项目中(该项目只与SQL Server联系)
要启动数据库升级向导,请先从“工具”菜单栏中选择“数据库函数”,然后从子菜单中选择“升级向导”。向导的第一个面板提供了两个选项:您可以构建一个新的SQL Server数据库来存储Access表,如图A所示,或者您可以将表添加到现有的SQL Server数据库中。选择现成的SQL Server数据库需要输入数据服务名称(DSN)。

选择建立新数据库或使用现有数据库。第二个面板询问有关SQL Server示例的信息。此外,您必须验证安全机制(如果存在的话),并为新数据库提供一个默认名称,如图b所示

命名一个新数据库
。此时,您可以将所需的表复制到SQL Server,也可以指出完成的部分将成为完整的ADP或链接表,如图c所示。


表示ADP或链接表

逃离困境

每个开发人员的数据库升级经验都不一样,不能保证第一次操作就成功。但是,如果您遵循本文中提供的相关规则,应该会遇到较少的错误。即使你这样做,你也可以很容易地纠正错误并继续操作。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 将现有的Access数据库升级为SQL

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情