MYSQL网页编程之将现有的Access数据库晋级为SQL
与其他数据库相比,MySQL易学易用。良多Access和SQLServer开辟职员都常常面对着将一个Access数据库晋级到SQLServer数据库的成绩。因为存在现有的Access晋级导游,这一变化的历程就会变得相称复杂,特别是当你创建一个与SQLServer数据相接洽的ADP的时分。但是,导游并非完美无缺的,必要办理的成绩仍是年夜有存在。起首,有些工具并非复杂的晋级,以是这时候你不能不工资地处置。第二,良多Access特征──好比一些查询范例,工具,和特定的数据范例在你没有做好晋级之前的筹办的情形下就会招致毛病的发生。如今,让我们会商一下在数据库晋级过程当中大概面对的成绩,我将供应可以办理成绩的一些通用的引导办法,最初,你必需花必定的工夫和精神将这些常识使用到开辟当中。
哪些不克不及够晋级?
在处置实践的成绩之前,让我们看看不克不及随便晋级的工具,它们包含以下:
交织表查询
包括SQLDISTINCTROW关头字的任何查询
一切的埋没工具
作为参数的表格数据的查询(这些表格能够晋级,但它们却不克不及准确的运转)
Pass-Through查询
SQL数据界说言语查询(好比CREATETABLE,ALTERTABLE,和DROP语句)
这些Access工具必要特定的处置。详细的,你将创建一个可对照的SQLServer工具,除此以外,SQLServer不撑持Jet平安特征,以是你必需利用Windows认证和/或SQLServer平安机制。
包含的成绩点
在数据库的晋级之前,假如你已晓得哪些中央将大概招致毛病并晓得怎样处置发生的毛病,数据库晋级过程当中招致的毛病的大概性将年夜年夜地削减。我可以供应的数据库晋级的最好的倡议是在开辟之前做好最完全的企图。如今,我将枚举数据库晋级过程当中大概会招致发生的成绩──假如你没有做好企图之前的筹办。
不撑持的日期
关于日期,在Access和SQLServer之间都存在很年夜的不同。Access撑持很年夜局限的日期,从100年1月1日到9999年12月31日。相反,SQLServer撑持的日期从1753年1月1日到9999年12月31日。数据库的晋级导游没法晋级包括SQLServer不撑持的日期的表格。这就意味着在晋级之前你必需野生地处置这些日期。侥幸的是,这一成绩只影响多数的数据库。
与表格把持相干的查询
开辟职员一般会利用表格把持的查询来限定或扣问一个数据来历。一个表格能够供应将数据显现在一个特定呈报中的多种选择。比方,SQLSELECT语句包括了用户的输出:
SELECTOrders.RequiredDate,Orders.ShippedDate,Orders.Freight,
Orders.ShipName,Orders.ShipAddress,Orders.OrderDate
FROMOrders
WHERE
Orders.OrderDateBetween!!And!!));
为了限制呈报中的数据,用户能够输出一个入手下手和停止的日期到列表(DateFrom和DateTo)。其他的代码能够翻开并显现满意用户输出的两个日期之间的纪录。
由于这类查询体例被Jet处置,表格中发生的成绩能够很快被办理。但是,当数据库晋级时,SQLServer不会触及到表格把持,了局一般为查询失利。为了修改这一查询体例,开辟职员必需变动表格。我倡议你利用输出参数属性,并将数值传送到SQLServer存储程序。
交织表查询
SQLServer不撑持JetTRANSFORM语句──这一语句可使一个交织表查询成为大概。比方,数据库晋级导游撑持以下查询体例:
TRANSFORMSum(CCur(.UnitPrice**(1-)/100)*100)
ASProductAmount
SELECTProducts.ProductName,Orders.CustomerID,Year()ASOrderYear
FROMProductsINNERJOIN(OrdersINNERJOIN
ONOrders.OrderID=.OrderID)ONProducts.ProductID=
.ProductID
WHEREOrders.OrderDateBetween#1/1/1997#And#12/31/1997#
GROUPBYProducts.ProductName,Orders.CustomerID,Year()
PIVOT"Qtr"&DatePart("q",,1,0)In("Qtr1","Qtr2","Qtr3","Qtr4")
还好,你无需在SQLServer中利用Transact-SQL(T-SQL)CASE关头词从头编写一个Access的交织表查询。上面的SELECT语句形貌了利用T-SQL体例从头创建一个交织表查询的语法:
SELECTCustomers.CustomerID,Customers.CustomerName
SUM(CaseWhenOrders.OrderdateBETWEEN01-Jan-1990AND31-Dec-1996
Then*Else0End)as1997)
FROMCustomersINNERJOINOrders
ONCustomerID=Orders.CustomerID
埋没工具
一切的埋没工具在数据库晋级过程当中都被疏忽。对此,你最好的处置办法是利用程序工具的GetHiddenAttribute属性反省工具。比方,以下代码利用这一办法决意工具是不是被埋没。
DimIsHiddenAsBoolean
IfApplication.GetHiddenAttribute(objtype,objname)Then
IsHidden=True
EndIf
假如特定的工具被埋没,IsHidden布尔变量将被为True。
包括索引的表格
数据库晋级导游不撑持没有索引或其他限定的表格。晋级导游能够晋级一个无索引的表格,但其转换以后只能成为一个只读的表格。侥幸的是,办理这一成绩很复杂:增加一个索引到每个没有索引的表格。一旦你已完成晋级数据库,请记着将增加的索引删除。
数据库晋级操纵步骤
一旦你已做好统统筹办,并断定操纵能够入手下手。数据库晋级导游能够为你供应三种选择:
输入Access表格到SQLServer并链接到Access数据库
利用Pass-Through查询与SQLServer的背景服务器的表格互相通信
将全部Access数据库挪动到一个Access数据库工程(其只与SQLServer接洽)
为了启动数据库晋级导游,先从工具菜单栏当选择数据库功效,然后从子菜单当选择晋级导游。导游的第一个面板供应两种选择:你能够创建一个新的SQLServer数据库来寄存Access表格,如图A所示,大概你能够在一个现成的SQLServer数据库中增加表格。选择一个现成的SQLServer数据库将必要输出一个数据服务称号(DSN)。
图A
选择创建一个新的数据库大概利用一个现成的数据库第二个面板请求取得SQLServer典范的信息。除此以外,你必需认证平安机制(假如存在)和为新的数据库供应一个缺省的称号,如图B所示。图B
为一个新的数据库定名在这点上,你能够将必要的表格复制到SQLServer,你也能够指出完成的部分将成为一个完全的ADP大概一个被链接的表格,如图C所示。
图C
指明一个ADP大概一个被链接的表格
避开贫苦
每个开辟职员都有分歧的数据库晋级操纵的履历,以是没法包管第一次操纵就可以够到达乐成。但是,假如你遵守本文中供应的有关划定规矩,你应当碰到更少的毛病,即便碰着,你也能够很简单地修改毛病,并持续操纵。
与其他数据库相比,MySQL易学易用。 比如日志传送、比如集群。。。 但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右) 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。 对于微软系列的东西除了一遍遍尝试还真没有太好的办法 对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
页:
[1]