将Access数据库移植到SQL Server.doc_第1页
将Access数据库移植到SQL Server.doc_第2页
将Access数据库移植到SQL Server.doc_第3页
将Access数据库移植到SQL Server.doc_第4页
将Access数据库移植到SQL Server.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

将Access数据库移植到SQL 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查询优化器所选择的数据提取方法。SQLServerProfilerSQLServerProfiler可以实时地捕获数据库服务器活动的连续记录。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”来执行。语法如下所示:SELECTALL|DISTINCTTOPinteger|TOPintegerPERCENTWITHTIESINTOnew_tableFROM,nWHEREGROUPBYALLgroup_by_eXPression,nWITHCUBE|ROLLUPCREATETABLEmytable(lowint,highint)UPDATE(修改)UPDATE语句可以存储在事务_SQL脚本程序中,然而比较好地执行UPDATE语句的方法是创建一个存储过程。APPEND(添加)ALLEND语句可以存储在事务_SQL脚本程序中,然而比较好地执行APPEND语句的方法是创建一个存储过程。移植MicrosoftAccess的查询到存储过程和视图每个Access查询都必须用以下的一系列语句替换:CREATEPROCEDUREASGOCREATEVIEWASGO对每个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:PARAMETERSBeginningDateDateTime,EndingDateDateTime;SELECTOrders.OrderID,LastName&,&FirstNameASSalesperson,Employees.Country,Orders.ShippedDate,OrderSuBTotals.SubtotalASSaleAmountFROMEmployeesINNERJOIN(OrdersINNERJOINOrderSubtotalsONOrders.OrderID=OrderSubtotals.OrderID)ONEmployees.=Orders.WHERE(Orders.ShippedDate)BetweenBeginningDateAndEndingDate)ORDERBYLastName&,&FirstName,Employees.Country,Orders.ShippedDate;SQLServer7.0格式:CREATEPROCEDUREEMP_SALES_BY_COUNTRYBeginningDatedatetime,EndingDatedatetimeASSELECTOrders.OrderID,LastName+,+FirstNameASSalesperson,Employees.Country,Orders.ShippedDate,OrderSubtotals.SubtotalASSaleAmountFROMEmployeesINNERJOIN(OrdersINNERJ问题:新手来看:Access转SQLServer要注意些什么?方法一:新手来看:Access转SQLServer要注意些什么?首先,你要明白什么是Access开发,什么是JET应用,如果你还不能明白,请参考: /index.asp?board=4&recordid=79FAB51E12DC在这里,我们谈论的是Access开发的升级,如何升级到SQLServer2000。你有几种升级方法可以选择。1、你可以采用链接表方式,通过链接表链接到SQLSERVER2000中的表。原先在ACCESS中开发的程序基本无需更改,除非你要更改数据结构2、你可以采用ADP的方式升级数据库,ADP方式基本抛弃了原先MDB大多数模式。你必须适应新的数据结构,接受JETSQL编写的查询变成T-SQL编写的存储过程、视图等等对象的结果。也就是说你必须重新学习T-SQL。另外请参考:/index.asp?board=4&recordid=72FAB61E14DC方法二:给你一些我的经验吧。反正access到sqlserver的移植是很痛苦的,我弄过好几次了。希望大家能补充一下。 1.数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。2.所有的默认值都丢失了。主要是数字类型和日期类型。3.所有now(),time(),date()要改成getdate()。4.所有datediff(d,time1,time2)要改成datediff(day,time1,time2)5.有可能一些true/false类型不能使用,要变为1/0。6.备注类型要通过cast(columnasvarchar)来使用。7.CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。8.isnull(rowname)要改成rowname=null方法三:1.ACCESS的数据库中的自动编号类型在转化时,sqlserver并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!2.转化时,跟日期有关的字段,SQLSERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。我遇见这种情况,用smalldatetime型时,转化失败,而用datetime型时,转化成功。3.对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:delete*fromuserwhereid=10,而对SQLSERVER数据库进行删除是用:deleteuserwhereid=10.4.日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQLSERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。5.在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQLSERVER数据库处理中,却不能用。VisualBasicforApplications与SQLServerTransact-SQL之间的函数比较(ADP): Visual Basic for Applications 与 SQL Server Transact-SQL 之间的函数比较 (ADP)注释本主题中的信息仅适用于 Microsoft Access 项目 (.adp)。下表比较了 Microsoft Visual Basic for Applications (VBA) 和 Microsoft SQL Server Transact-SQL 中的常用函数。有关 Transact-SQL 标量函数的详细信息,请参阅 SQL Server 文档。注意 “升迁向导”将下列 VBA 函数(用于表有效性规则、字段验证和默认情况下)转换为对等的 Transact-SQL 函数。字符串函数VBA 函数Transact-SQL标量函数Asc(x)ASCII(x)Chr$(x)CHAR(x)Lcase$(x)LCASE(x) LOWER(x)Len(x)DATALENGTH(x)Ltrim$( x)LTRIM(x)Mid$(x,y,z)SUBSTRING(x,y,z)Right$(x,y)RIGHT(x,y)Rtrim$(x)RTRIM(x)Space$(x)SPACE(x)Str$(x)STR(x)Ucase$( x)UCASE(x) UPPER(x)转换函数VBA 函数Transact-SQL标量函数Ccur(x)CONVERT(money,x)Cdbl(x)CONVERT(float,x)Cint(x)CONVERT(smallint,x)Clng(x)CONVERT(int,x)Csng(x)CONVERT(real,x)Cstr(x)CONVERT(varchar,x)Cvdate(x)CONVERT(datetime,x)日期函数VBA 函数Transact-SQL标量函数Date(x)CONVERT(DATETIME,CONVERT(varchar,GETDATE(x)Dateadd(,x,y)DATEADD(, x, y)Datediff(,x,y)DATEDIFF(, x, y)Datepart(, x)DATEPART(, x)Day(x)DATEPART(dd,x)Hour(x)DATEPART(hh,x)Minute(x)DATEPART(mi,x)Month(x)DATEPART(mm,x)Now(x)GETDATE(x)Second(x)DATEPART(ss,x)Weekday(x)DATEPART(dw,x)Year(x)DATEPART(yy,x)数学函数VBA 函数Transact-SQL标量函数Int(x)FLOOR(x)Sgn(x)SIGN(x)Rnd(x)ROUND(x)专题地址:/?kbid;79FAB41E14DC简述:阅读前需掌握:难度等级:等级未评定新手来看:Access的特点、概念。什么是纯ACCESS环境?问题:这里只解决一个问题,到底什么是Access? 设计一个数据库管理系统,用access在access里面设计好表,查询,然后再用vb做窗体做连接,跟在access里面设计窗体,报表再调VBA来编代码有什么区别吗我们是分成几个组做的,但其他人好像没这个意识,我觉得直接在access里把一切都作好再调用vb编码好像更容易一点我不明白,MDB到底是什么,假如说SQL是一个后台数据存储库,那ACCESS既是后台又是前台,这么说,SQL和ACCESS同样都可以被调用,那为什么还要SQL呢,ACCESS不是完全可以代替SQL了吗MDB格式文件能否脱离ACCESS环境,在未装ACCESS的机器上被其他软件调用?回答:1、Access是MicrosoftOffice的一个组件,一个前后台结合的数据库“软件”。也就是说Access既拥有用户界面(VB可以用来开发用户界面);也拥有逻辑、流程处理,即VBA语言(VB也可以用来做逻辑处理);又可以存储数据,即在“表”中存储数据。而所有这些都存储在一个MDB格式的文件中(当然,也可以是MDE等格式)。回答上述问题:Access里面设计好界面,VB中必须建立ACCESS.APPLICATION才能调用,也就是说这基本是VBA编程,而不是VB编程。 2、Access不是一种存储格式,是一种软件。请大家严格区分Access软件与MDB格式。以下的语句是错误的:“我用VB来开发MIS系统,数据存储在ACCESS中。”。VB下调用MDB格式(或JETDB)只是调用一种格式的文件而已,并没有调用到Access,其实官方说法叫“VB的JET应用”。另外,MDB格式的文件也可以被其他开发工具,比如DELPHI/PB/C/PHP/ASP/CGI/C#/J#/JAVA/VB.NET/C.NET.调用。但是被调用的只是MDB文件,很多ACCESS软件所具有的功能,这些开发工具是无法调用的。也正因为如此,类似这样的问题“我的系统中没有安装OFFICEACCESS,是否能用ASP调用ACCESS数据库呢?”,答案是:当然可以,其实你根本没有使用ACCESS这个软件,只是使用了MDB这种数据库格式,而这种格式只要系统中有OLEDB引擎就可以支持。WINDOWS98以及以上版本的WINDOW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论