仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 574|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL编程:将Access数据库移植到SQL Server[摘]

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:45:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
当然,或许这并不是我们拒绝MySQL的一个有说服力的MySQL学习教程,但是对于一些比较守旧的IT经理来说,在为一些关键业务选择平台的时候,平台的成熟性却是必须要考虑的一个因素,在这一点上,MySQL无疑毫无优势。access|server|数据|数据库跟着用户关于企业级高功能数据库的需求的增加,用户经常要从MicrosoftAccessJet引擎的文件-服务器情况下转换到MicrosoftSQLServer的客户-服务器情况。MicrosoftOffice2000中的Access2000UpsizingWizard可完成将数据表和查询转移到SQLServer7.0中。假如您用的是Access的较早的版本,您能够先将它晋级为Access2000,然后再利用个中的UpsizingWizard,从而将您的使用移植到SQLServer中。

 

假如您其实不太乐意接纳Access2000和UpsizingWizard来完成移植,本文能够作为将Access2000移植到SQLServer的一个指南。转移一个Access上的使用起首必要将数据转移到SQLServer,然后将查询转移进数据库,或是转移为SQL文件以备稍后实行。最初要接纳的步骤是移植使用程序。

数据库移植顶用到的SQLServer工具

SQLServer办理器(SQLServerEnterpriseManager)
SQLServer办理器同意对SQLServer和SQLServer中的工具举行企业级的设置和办理。SQLServer办理器供应一个强无力的scheduling引擎,高度的容错力和一个嵌进式的复制办理界面。利用SQLServer办理器能够完成以下功效:

办理毗连和用户允许
创立剧本程序
办理SQLServer工具的备份
备份数据和事件处置日记
办理表、视图、存储历程、触发器、索引、划定规矩、默许值和用户界说的数据范例
创建全文本索引、数据库图表和数据库保护企图
输出和输入数据
转换数据
实行各类收集办理义务

在以MicrosoftWindowsNT为操纵体系的盘算机中,SQLServerManager由SQLServerSetup举行安装,并被默许为服务器组件,而在运转着WindowsNT和MicrosoftWindows95的呆板上,它将被默许为客户方组件。您将从SQLServerManager的图形用户界面中启动数据转移服务(DTS,DataTransformationServices)。


数据转移服务(DataTransformationServices,DTS)
数据转移服务同意您在多种异构数据源之间输出和输入数据,这些数据源接纳基于数据库的OLE系统布局;或在利用SQLServer7.0的多个盘算机之间转移数据库和数据库工具;您还能够经由过程使用数据转移服务,更便利地在一个在线事件处置体系(OLTP)中创建数据堆栈和数据中央。


DTSWizard同意您交互地创立DTS包,经由过程OLEDB和ODBC来输出、输入、考证和转移数据。DTSWizard还同意您在干系型数据库之间拷贝图解(schema)和数据。

SQLServer查询剖析器(QueryAnalyzer)
SQLServer查询剖析器是一种图形化的查询工具,经由过程它您能够剖析一个查询,同时实行多个查询,检察数据和猎取索引倡议。SQLServer查询剖析器供应了showplan选项,可用来显现SQLServer查询优化器所选择的数据提取办法。

SQLServerProfiler
SQLServerProfiler能够及时地捕捉数据库服务器举动的一连纪录。SQLServerProfiler同意您监控SQLServer发生的事务,过滤基于用户指定尺度的事务,或将操纵步骤输入到屏幕、文件或数据表。使用SQLServerProfiler,您能够从头实行所捕捉的上一次操纵。这类工具能够匡助使用程序开辟者辨认那些大概会下降使用程序功能的事件处置。在将一个基于文件系统布局的使用程序移植到客户/服务器布局中时该特征是很有效的,由于它的最初一步包含劈面向新的客户/服务器情况的使用程序举行优化。


转移表和数据
利用DTSWizard将您的Access数据转移到SQLServer,可接纳以下步骤:

在SQLServerManager(EnterpriseManager)的工具菜单中,鼠标指向“DataTransformationServices”,然后点击“ImportData.”
在“选择数据源”(ChooseaDataSource)的对话窗口中,选择MicrosoftAccess为数据源,然后输出您的.mdb文件名(mdb为文件扩大名)大概选择扫瞄文件。
在“选择数据方针”(ChooseaDestination)的对话窗口中,选择“MicrosoftOLEDBProviderforSQLServer”,再选择好数据库服务器,然后点击所需的认证形式。
在“指定表备份或查询”(SpecifyTableCopyorQuery)的对话窗口中,点击“拷贝表”(Copytables)。
在“选择数据源”的对话窗口中,点击“选择一切项”(SelectAll)。


移植MicrosoftAccess查询
您能够将Access的查询以上面的格局之一转移至SQLServer中:

事件处置SQL剧本程序(Transact-SQLscripts)
事件处置SQL语句一般是由数据库程序挪用的,可是您也能够利用SQLServer7.0中包括的SQLServer查询剖析器间接运转它们。SQLServer查询剖析器可匡助开辟者测试事件处置SQL语句,或运转那些实行查询处置、数据操纵(拔出,修正,删除)和数据界说(创立表)的事件处置SQL语句。


存储历程(Storedprocedures)
开辟者能够将年夜部分发生自Access查询(查找,拔出,修正,删除)的事件处置SQL语句转移至存储历程。用事件处置SQL语句誊写的存储历程能够用来对您的数据存取打包,并使之尺度化,并且存储历程实践上是存储在数据库中的。存储历程能够带参数,也可不带参数,能够由数据库程序挪用大概由SQLServer查询剖析器手动实行。

视图(Views)
视图是从一个或多个表中显现特定的行和列的假造表。它们同意用户能够不间接实行组成查询基本的庞大毗连而创建查询。视图不撑持参数的利用。毗连多个数据表的视图不克不及用INSERT,UPDATE或DELETE语句来修正。视图由事件处置SQL语句挪用,也可用于SQLServer查询剖析器中运转的程序段。SQLServer视图和SQL-92尺度不撑持视图中的ORDERBY排序子句。如欲懂得事件处置SQL,存储历程和视图的其他信息,请参阅SQLServer在线参考书。


Access查询范例的SQLServer移植选择与倡议
一个SELECT语句能够存储在事件处置SQL文件、存储历程或是视图中。创建存储历程是将数据库使用开辟与数据库计划的物理实行分隔的最好办法。存储历程可在一处创立而由使用程序挪用。
假如存储历程所基于的数据库变更了,而存储历程经由细心的修正以反响这些变更,则对存储历程的挪用将不会遭到损坏。

交织表(CROSSTAB)
交织表常常用于总结报表。

一个Access的交织表能够经由过程SQL程序段、存储历程或视图中的事件处置SQL语句来实行。每当收回一个查询时,数据毗连被重现实行以确保比来的数据失掉利用。

依据实践使用情形,对照符合的办法是将交织表中的数据存储为一个一时表(参考上面的MAKETABLE),一时表对资本的需求对照少,可是一时表在创建的同时只供应对数据的一个快照(snapshot)。

创立表(MAKETABLE)
Access中的“MAKETABLE”(创立表)能够经由过程事件处置SQL剧本程序或存储过程当中的事件处置SQL言语的建表语句“CREATETABLE”来实行。语法以下所示:
SELECT[ALL|DISTINCT]
[{TOPinteger|TOPintegerPERCENT}[WITHTIES]]
<select_list>
[INTOnew_table]
[FROM{<table_source>}[,…n]]
[WHERE<search_condition>]
[GROUPBY[ALL]group_by_expression[,…n]
[WITH{CUBE|ROLLUP}]
CREATETABLEmytable(lowint,highint)

UPDATE(修正)
UPDATE语句能够存储在事件_SQL剧本程序中,但是对照好地实行UPDATE语句的办法是创立一个存储历程。

APPEND(增加)
ALLEND语句能够存储在事件_SQL剧本程序中,但是对照好地实行APPEND语句的办法是创立一个存储历程。


移植MicrosoftAccess的查询到存储历程和视图

每一个Access查询都必需用以下的一系列语句交换:
CREATEPROCEDURE<NAME_HERE>AS
<SELECT,UPDATE,DELETE,INSERT,CREATETABLEstatementfromMicrosoftAccess>
GO

CREATEVIEW<NAME_HERE>AS
<Place(SELECTonly,withnoparameters)MicrosoftAccessQuery>
GO

对每一个Access查询应实行:

翻开Access,然后在SQLServer中,翻开SQLServer查询剖析器。
在Access的数据库窗口中点击“Queries”tab键,然后点击“Design”按钮。
在“View”菜单上点击“SQL”按钮。
将全部查询粘贴到SQLServer查询剖析器中。
测试语法,保留事件处置SQL语句以备后用,大概在数据库中实行这些语句。您能够选择将事件处置SQL语句保留到一段剧本程序中。

移植MicrosoftAccess查询到事件处置SQL语句

年夜部分的Access查询应当转换成存储历程和视图。但是,有一些使用程序开辟者不太经常使用的语句能够存储为事件处置SQL剧本,一种以sql为文件扩大名的文本文件。这些文件能够在SQLServer查询剖析器中运转。

假如您盘算将一些Access查询转换为sql文件的话,能够思索依据它们利用的体例有区分地将这些事件处置SQL语句分离放在几个剧本程序中。比方,您能够将必需以一样频次运转的事件处置SQL语句回类到统一个剧本中。另外一个剧本中则应包括一切只在某些前提下运转的事件处置SQL语句。别的,必需以必定按次实行的事件处置SQL语句应该回类到一个不一连的剧本中。

将Access语句转移到事件处置SQL文件

将语句拷贝到SQLServer查询剖析器中
利用蓝色的多选项图标剖析语句
在得当时分实行该语句

要实行Access中的创立表(MAKETABLE)的查询义务的开辟者在SQLServer中有几种选择。开辟者可创立以下工具之一:

一个视图
视图具有静态的假造表的效果,可供应比来的信息。这是一个输出/输入强化器,由于每当收回一个查询时它都请求对数据表重现创建毗连。

一个一时表
一时表为已毗连的用户会话创建一个快照。您能够创建部分的或全局的一时表。部分一时表只在以后会话中可见,而全局一时表则在一切会话都是可见的。在部分一时表的名字前加上单个数字的前缀((#table_name)),而在全局一时表的名字前加上两位数字的前缀(##table_name)。对一时表的查询实行起来十分快,由于它们获得一个了局集的时分一般只用一个表,而不是将多个表静态地毗连在一同来。
如欲懂得一时表的其他信息,请参阅SQLServer在线参考书。

SQLServer7.0中的数据转换服务(DTS)同意您经由过程创立包来完成一时表创建的尺度化、主动化和进度布置。比方,当您移植Access2.0中的Northwind典范数据库时,用于季度数据报表的交织表可变化为一个视图大概一个可在标准基本上创建一时表的数据转换。如欲懂得关于DTS的其他信息,请参阅SQLServer在线参考书。

其他计划上的思索
上面是当您将您的Access使用移植到SQLServer时必需思索的一些其他成绩:

利用参数
带参数的SQLServer存储历程必要一种分歧于Access查询的语法格局,比方:
Access2.0格局:
查询名:EmployeeSalesByCountry,inNWIND.mdb:

PARAMETERS[BeginningDate]DateTime,[EndingDate]DateTime;
SELECTOrders.[OrderID],[LastName]&","&[FirstName]ASSalesperson,Employees.Country,Orders.[ShippedDate],[OrderSubtotals].SubtotalAS[SaleAmount]
FROMEmployeesINNERJOIN(OrdersINNERJOIN[OrderSubtotals]ONOrders.[OrderID]=[OrderSubtotals].[OrderID])ONEmployees.=Orders.
WHERE(((Orders.[ShippedDate])Between[BeginningDate]And[EndingDate]))
ORDERBY[LastName]&","&[FirstName],Employees.Country,Orders.[ShippedDate];

SQLServer7.0格局:

CREATEPROCEDUREEMP_SALES_BY_COUNTRY
@BeginningDatedatetime,
@EndingDatedatetime
AS
SELECTOrders.[OrderID],[LastName]+","+[FirstName]ASSalesperson,Employees.Country,
Orders.[ShippedDate],[OrderSubtotals].SubtotalAS[SaleAmount]
FROMEmployeesINNERJOIN(OrdersINNERJ
如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL。然而,如果你的项目不是在GPL协议下的话,你必须为使用MySQL来支付许可费用,或者你可能因为这个因素而将你的项目改为遵循GPL。
小女巫 该用户已被删除
沙发
发表于 2015-1-19 23:00:51 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
若天明 该用户已被删除
板凳
发表于 2015-1-25 22:34:33 | 只看该作者
大家注意一点。如下面的例子:
莫相离 该用户已被删除
地板
发表于 2015-2-4 09:52:21 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
金色的骷髅 该用户已被删除
5#
发表于 2015-2-9 21:56:25 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
透明 该用户已被删除
6#
发表于 2015-2-27 22:48:38 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-9 14:56:22 | 只看该作者
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
因胸联盟 该用户已被删除
8#
发表于 2015-3-17 00:08:01 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
柔情似水 该用户已被删除
9#
发表于 2015-3-23 07:59:15 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 03:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表