SSMA( SQL Server Migration Assistant) For Access(Access 升迁向导替代工具)-最全的教程

2017-07-29 08:58:00
zstmtony
原创
438



SSMA( SQL Server Migration Assistant) For Access(Access 升迁向导替代工具)


SSMA For Access 全名为:Microsoft SQL Server Migration Assistant v5.3 for Access 


1.Access 2003至Access 2010有一个非常好的Access升迁到Sql server的向导工具,但是从Access 2013版本开始,微软取消了升迁Sqlserver功能

 以前的Access 2000,Access 2002, Access2003 ,Access 2010 包含一个Access升迁到Sql server的功能,但是可惜的是,Access从2013版本开始(包括2016)取消了升迁Sqlserver功能,需要使用SSMA( SQL Server Migration Assistant)

 微软将这个升迁功能 集成到 SSMA工具里,可能主要是想集中在一起,如SSMA For Access  ,SSMA For Oracle 等等

使用 SQL Server Migration Assistant (SSMA) 

 一个更方便更定制化的工具, (Access 2013和Access 2016唯一的选择),可以使用 SSMA创建你的SQL Server 数据库,


2.SSMA 的优点是:


1.可以按照你自己的喜好去改变设置和定制化升迁选项 
2.允许你去保存升迁包及以后随时和多次运行这个升迁包 
3.能够适应 所有版本的  SQL Server 和 Access


3.SQL Server Migration Assistant (SSMA)下载地址:

   不过注意,这个工具暂时只有英文版,全名为Microsoft SQL Server Migration Assistant v5.3 for Access 

   https://www.microsoft.com/en-us/download/details.aspx?id=42656

   

   

4. ACCESS数据库迁移到SQLSERVER数据库两种方法(升迁过程图文详解) 

     转自网上文章-未知作者

 

ACCESS2000文件

ACCESS2007打开,并迁移到SQLSERVER2005 

打开ACCESS2007的数据库工具

方法一:使用ACCESS2007自带的数据库迁移工具

1、打开ACCESS2007的数据库迁移向导

http://files.jb51.net/file_images/article/201310/2013100915404898.jpg

http://files.jb51.net/file_images/article/201310/2013100915404899.jpg

2、点击SQLSERVER按钮,弹出升迁向导对话框

http://files.jb51.net/file_images/article/201310/20131009154048100.jpg

3、选择新建数据库

http://files.jb51.net/file_images/article/201310/20131009154048101.jpg

4、输入计算机名,我的本地计算机名字叫joe,因为SQLSERVER安装在本地,所以选择使用可信连接就可以了

数据库名称默认就可以了

http://files.jb51.net/file_images/article/201310/20131009154048102.jpg

5、选择所有表,移动到右边框

http://files.jb51.net/file_images/article/201310/20131009154048103.jpg

 

6、把表索引也一起升迁到SQLSERVER

http://files.jb51.net/file_images/article/201310/20131009154048104.jpg

7、由于没有应用程序,这一步可以直接跳过

http://files.jb51.net/file_images/article/201310/20131009154048105.jpg

8、点击完成按钮开始迁移数据库到SQLSERVER

http://files.jb51.net/file_images/article/201310/20131009154048106.jpg

9、开始迁移

http://files.jb51.net/file_images/article/201310/20131009154048107.jpg

http://files.jb51.net/file_images/article/201310/20131009154048108.jpg

http://files.jb51.net/file_images/article/201310/20131009154048109.jpg


10、刷新一下SQLSERVER2005里的对象资源管理器里的数据库

迁移到SQLSERVER之后,SQLSERVER会自动在ACCESS数据库的名称后加SQL这三个字母

http://files.jb51.net/file_images/article/201310/20131009154048110.jpg

11、打开LygSQL中的某个数据表,看是否迁移成功

http://files.jb51.net/file_images/article/201310/20131009154048111.jpg

12、表约束也完整迁移成功

http://files.jb51.net/file_images/article/201310/20131009154048112.jpg


方法二:使用SQLSERVER2005自带的数据导入导出向导

限制:SQLSERVER2005自带的数据导入导出向导工具只支持ACCESS2003或以下文件

1、在SQLSERVER里新建一个与ACCESS数据库同名的数据库Lygl

http://files.jb51.net/file_images/article/201310/20131009154048113.jpg

2、选中Lygl数据库,然后按右键》任务-》导入数据

http://files.jb51.net/file_images/article/201310/20131009154048114.jpg

3、打开SQLSERVER导入导出向导

http://files.jb51.net/file_images/article/201310/20131009154048115.jpg

 

4、下一步

http://files.jb51.net/file_images/article/201310/20131009154048116.jpg

http://files.jb51.net/file_images/article/201310/20131009154048117.jpg

提示:如果ACCESS数据库有密码的话,点击下一步会出错,所以在点击下一步之前请先去除ACCESS数据库的密码!

http://files.jb51.net/file_images/article/201310/20131009154048118.jpg

http://files.jb51.net/file_images/article/201310/20131009154048119.jpg

http://files.jb51.net/file_images/article/201310/20131009154048120.jpg

5、点击下一步

http://files.jb51.net/file_images/article/201310/20131009154048121.jpg

6、再点击下一步

http://files.jb51.net/file_images/article/201310/20131009154048122.jpg

7、再点击下一步

勾选第一个方框就可以了,SQLSERVER会自动帮你勾选ACCESS数据库中的所有表格

http://files.jb51.net/file_images/article/201310/20131009154048123.jpg

8、点击下一步

http://files.jb51.net/file_images/article/201310/20131009154048124.jpg

9、最后点击完成按钮

http://files.jb51.net/file_images/article/201310/20131009154048125.jpg

http://files.jb51.net/file_images/article/201310/20131009154048126.jpg

http://files.jb51.net/file_images/article/201310/20131009154048127.jpg

http://files.jb51.net/file_images/article/201310/20131009154048128.jpg

10、刷新一下SQLSERVER对象资源管理器里的数据库

http://files.jb51.net/file_images/article/201310/20131009154048129.jpg

11、打开表

http://files.jb51.net/file_images/article/201310/20131009154048130.jpg

数据都导入进来了

但是表约束没有导入进来,这个比ACCESS自带的数据库迁移向导差了一点

http://files.jb51.net/file_images/article/201310/20131009154048131.jpg

 

 

整个迁移的过程就完成了





5.用SSMA移植Acceses到SQL Server可能遇到的几点问题

   转自网上文章-未知作者 ,请作者看到 联系


这些年来,Access数据库一直在PC平台占据主导地位,使用它建立了大量的部门数据库  。随着这些数据库的应用,它们中的大多数已经慢慢地具有应急使命,现在需要的是加固成为一个安全的客户端—服务器引擎  。

在微软想要统治世界的伟大计划中,更希望这种引擎是SQL Server  。随着这种想法,微软针对Access提供了免费的SQL Server移植工具——SSMA  。

对于开发者来说,移植工具已有很大的实惠  。但期望这种工具能够移植整个应用程序是不现实的,因为Access有一些SQL Server所没有的简单工具(例如窗体和报表性能)  。但是我们有理由相信这种工具能做大部分工作,比如建立适当的表,转移数据,把查询转换成视图等  。

SSMA的运行需要在.NET Framework2.0版本以上,J#2.0可重组包以及至少1GB RAM  。

SSMA具有一个清晰的图形用户界面,分成四个面板  。在建立一个新工程之后,首先添加一个或多个Access数据库,然后连接到适当的SQL Server数据库,下一步就是把架构(schema)转换成SQL Server  。

注意,这个过程并不是运行依靠SQL Server引擎的架构,而是简单地生成了一个在SSMA中可见的,可用的SQL Server架构,同时生成一个错误、警告和信息标记的集合  。

从这点来看,该工具的能力就显而易见  。作为一个开始,这些标记指出转换问题,例如:不支持Access的一些函数如DateDiff,所以不能转换(当然这些函数可以被转换,但SSMA不能实现)  。

你可以浏览Access架构,观察正在计划的类型映射等等,当然如果你不喜欢这种缺省映射,也完全可以改变它,或者根据特殊的工程甚至特殊的表来做改变  。

查询是一个比较特别的情形  。它们被转换成SQL Server视图:你可以编辑Access查询然后产生适当的SQL Server代码  。这样的编辑是发生在SSMA的架构中,而不是在Access数据库本身完成  。

你可以使用SSMA运行依靠数据库的SQL Server架构,它建立了一种结构来保存数据以便你可以移植数据  。理论上听起来很好,但是实际上是怎样的呢?虽说尝试从任意一个数据库引擎移植到另一个都是麻烦的,且这个工具可以免费的为你做90%的工作,但它还存在一些缺陷  。

例如,虽然不是SQL标准的一部分,Access需要所有日期来包装到hash记号中  。不幸的是,SSMA看起来没有考虑到这点,这个疏忽的结果就是所有涉及到日期的查询结果都不能成功转换  。下面是一个错误信息的例子:

/* * SSMA error messages: * A2SS0058: Following SQL statement is not supported and cannot be converted: * * SELECT

DISTINCTROW EMPLOYEES.EmployeeNo, EMPLOYEES.FirstName, EMPLOYEES.LastName, EMPLOYEES.DateOfBirth, EMPLOYEES.DateEmployed *

FROM EMPLOYEES * WHERE ((EMPLOYEES.DateOfBirth)>#1/1/1970#); * */

PRINT ERROR: SSMA failed to convert the previous statement.

日期在数据库中是很常见的,所以这个疏忽将会影响大多数数据库转换  。但要解决并不困难,如下:

SELECT EmployeeNo, FirstName, LastName, DateOfBirth FROM dbo.EMPLOYEES WHERE (DateOfBirth > CONVERT(DATETIME, 1970-01-01))

从例子中返回正确的数据集  。

(我们可以讨论一下是否是这样,例如:CONVERT(DATETIME, 1970-01-01 00:00:00, 102)可能更恰当,但是不管怎么说,我们可以转换数据处理),如果我们可以手动地做,SSMA就应该可以为我们做这件事  。

还有更糟糕的问题:Access默认是在文本周围使用双引号,例如:
SELECT EMPLOYEES.EmployeeNo, EMPLOYEES.FirstName FROM EMPLOYEES WHERE ((EMPLOYEES.FirstName="Norma"));

SQL Server不是这样,它使用单引号,如下:WHERE EMPLOYEES.FirstName=Norma;

然而,SSMA保留了上面这样的双引号代码,没做任何改变  。而且在架构产生期间并没有引发错误提示,错误提示只发生在把架构加载到SQL Server数据库的过程中  。那时,SSMA抛出一个错误提示说存在一个非法列名Norma,这样视图就不能加载到SQL Server中了  。以上显示出SSMA并没有做足够的语法检查  。

再强调一下,Access默认使用双引号,而SSMA却不能处理如此简单平常的Access语法  。这就像一个法语到英语的翻译者可以处理语言中的大多数词,却为单词“Bonjour”感到束手无策一样  。

再一个例子,Access允许为字段添加规则约束,例如一个名为“Title”的字段可以接受的值可能只有Mr., Mrs., Miss., Ms等  。但SQL Server不能准确地支持同样的类型约束  。非常明显SSMA转换这种约束规则为一个表约束  。Brilliant,做的不错,只是在代码中丢失了字段名:

ALTER TABLE [dbo].[NAMES] ADD CONSTRAINT [SSMA_CC$NAMES$Title$validation_rule] CHECK (In (Mr.,Mrs.,Miss,Ms,Dr.,Prof.))

这不仅不能在架构转载到SQL Server时运行,同时更不能产生一个错误消息  。最后一行的正确语法应该是:CHECK (Title In (Mr.,Mrs.,Miss,Ms,Dr.,Prof.))

那么,我们是否应该从机器上删除SSMA呢?当然不,因为它确实完全自动地做了大量的工作,也提供了一个合理的环境,在那里可以看到问题区域并做出整理  。指出它的缺陷,只是期望SSMA能更好  


5. ACCESS数据库升迁到SQLSERVER 可能遇到的各种问题(ACCESS升迁Sql server时的特别注意事项):

    ACCESS转SQLSERVER后代码需要修改的语句


    原文:图老师 (tmtony整理)


     在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档,文件越来越大(也可用压缩修复的方式减小文件大小,但太麻烦),访问速度越来越慢,甚至会数据库损坏,损坏得比较轻的可以找第三方工具来修复,便严重时会导致数据库无法修复,或修复后数据记录会损坏。所以我们大有必要升迁我们现有的Access数据库到SQL Server;  
1,对于日期字段字段   

      access表示为:#1981-28-12#   SQLSERVER2000表示为:''1981-02-12'' 


2,SQL语句区别

     select ,update 在对单表操作时都差不多, 但多表操作时update语句的区别ACCESS与SQLSERVER中的UPDATE语句对比:   

     SQLSERVER中更新多表的UPDATE语句:   UPDATE Tab1   SET a.Name = b.Name   FROM Tab1 a,Tab2 b   WHERE a.ID = b.ID;   

     同样功能的SQL语句在ACCESS中应该是   UPDATE Tab1 a,Tab2 b   SET a.Name = b.Name   WHERE a.ID = b.ID; 

      即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后. 更新单表时:都为: UPDATE table1 set ab='12',cd=444 where .... 


3,delete语句    
   access中删除时用:delete * from table1 where a2 即只要把select 语句里的select 换成delete就可以了。   
   sqlserve 中则为: delete from table1 where a2 即没有*号 


4,as 后面的计算字段区别 
   access中可以这样:select a,sum(num) as kc_num,kc_num*num as all_kc_num  即可以把AS后的字段当作一个数据库字段参与计算。 
   sqlserver 中则为:select a,sum(num) as kc_num,sum(num)*num as all_kc_num  即不可以把AS后的字段当作一个数据库字段参与计算。


5,[.]与[!]的区别   
   access中多表联合查询时:select tab1!a as tab1a,tab2!b tab2b from tab1,tab2  ,中间的AS可以不要。
   sqlserve 中则:select tab1.a as tab1a,tab2.b tab2b from tab1,tab2  ,中间的AS可以不要。 

6,联合查询时,  
   access中多表联合查询:'select a,b from( select a,b from tab1 where a3 union select c,d from tab2 ) group by a,b 
   sqlserve 中则'select a,b from( select a,b from tab1 where a3 union select c,d from tab2 ) tmptable group by a,b
   即要加一个虚的表tmptable,表名任意。

7,access升级到sqlserver时,
   可以用sqlserver的数据导入工具导入数据,但要做必要的处理。
   access中的自动编号,不会自动转换SQL中的自动编号,只能转换为int型,要把它手工改成标识字段,种子为1,
   把所有导入被sqlserver转化成的以n开头的字段类型的n去掉,如nvarchar-varchar.
   把需要有秒类型的日期字段改成datatime类型(SQL会把所有的日期开转化成smalldatetime型) 

8, true与1=1 
   access用where true表示条件为真
   sqlserver用where 1=1表示条件为真 

9,判断字段值为空的区别 普通空: 
  Access和sql server一样 where code is null 或 where code is nol null 条件空:     
  Access:iif([num] is null,0,[num])  或 iif([num] is null,[num1],[num])     
  SQLServer: isnull([num],0) 或 isnull([num],[num1]) 

10,SQL语句取子串的区别 
  access:MID(字段,n1,[n2]),LEFT(字段,n),RIGHT(字段,n) 如:select left(cs1,4)+'-'+cs2 as cs3 
  SQLServer: SUBSTRING(expression, start, length) 
  如:select substring(cs1, 1, 2) + substring(cs1, 4, 2) + '-' + cs2 as cs3  



其它相关:


6. win7 x64下用SSMA导access数据入mssql2008注意事项
主要涉及到win7 x64下用SSMA导access数据入mssql2008注意事项方面的内容,对于win7 x64下用SSMA导access数据入mssql2008注意事项感兴趣的同学可以参考一下。

背景:老早在xp上一个access2003数据库,现在要把里面的数据导入到64位win7的mssql2008中。一种方式使用access自带的东东,但是在我的情况下特慢,所以选择了SSMA for access。相较于mssql自带的工具,这个可以在mssql中保留access中的所有结构和关系(网上搜索提示有3种方法可以执行access转mssql),也是MS的东东,可以免费使用。但是在使用SSMA时会提示:required mdb-file *** is not loaded。究其原因是由于我的机子上还是安装的是office2003,dao library缺失,这就导致不能成功转导。方法是把office升级合适版本(我是升级到office2010)。


另外,如果原先的access弃之不用的话,要对SSMA进行一番设置。具体设置为:SSMA的tools---default project settings--Tables下的Add timestamp colums设置为Never。这样就不会在转导后的每个table中增加一个timestamp的field了!


7. 这些年来,Access数据库一直在PC平台占据主导地位,使用它建立了大量的部门数据库。随着这些数据库的应用,它们中的大多数已经慢慢地具有应急使命,现在需要的是加固成为一个安全的客户端—服务器引擎。

 
在微软想要统治世界的伟大计划中,更希望这种引擎是SQL Server。随着这种想法,微软针对Access提供了免费的SQL Server移植工具——SSMA。


什么是SSMA? SQL Server Migration Assistant(SSMA)是微软公司推出的数据库升迁工具,可以帮助用户轻松地从常用数据库迁移数据到SQL Server。由于不同数据产品间的标准都不相同,所以借助SSMA,可以使原来复杂的数据迁移工作变得非常轻松。
微软公司针对不同的数据库产品推出了针对性的SSMA工具,主要产品分别面向Oracle、Sybase、Access、MySQL等数据库。所以,当进行数据升迁之前,要确定进行升迁的数据库类型,然后选择合适的SSMA进行操作。

 
对于开发者来说,移植工具已有很大的实惠。但期望这种工具能够移植整个应用程序是不现实的,因为Access有一些SQL Server所没有的简单工具(例如窗体和报表性能)。但是我们有理由相信这种工具能做大部分工作,比如建立适当的表,转移数据,把查询转换成视图等。
 
SSMA的运行需要在.NET Framework2.0版本以上,J#2.0可重组包以及至少1GB RAM。
 
SSMA具有一个清晰的图形用户界面,分成四个面板。在建立一个新工程之后,首先添加一个或多个Access数据库,然后连接到适当的SQL Server数据库,下一步就是把架构(schema)转换成SQL Server。
 
注意,这个过程并不是运行依靠SQL Server引擎的架构,而是简单地生成了一个在SSMA中可见的,可用的SQL Server架构,同时生成一个错误、警告和信息标记的集合。
 
从这点来看,该工具的能力就显而易见。作为一个开始,这些标记指出转换问题,例如:不支持Access的一些函数如DateDiff,所以不能转换(当然这些函数可以被转换,但SSMA不能实现)。
 
你可以浏览Access架构,观察正在计划的类型映射等等,当然如果你不喜欢这种缺省映射,也完全可以改变它,或者根据特殊的工程甚至特殊的表来做改变。
 
查询是一个比较特别的情形。它们被转换成SQL Server视图:你可以编辑Access查询然后产生适当的SQL Server代码。这样的编辑是发生在SSMA的架构中,而不是在Access数据库本身完成




相关文章:

Access升迁到Sql server有些数据表迁迁总是失败的解决办法(表被跳过或导出失败)

Access取消了升迁向导Sqlserver功能,需要使用SSMA


相关英文介绍:

Microsoft SQL Server Migration Assistant (SSMA) for Access is a tool to automate migration from Microsoft Access database(s) to SQL Server 

Details
Version:
5.3

File Name:
SSMA_Access\SSMA for Access.5.3.0.exe

Date Published:
5/7/2014

File Size:
7.0 MB

SQL Server Migration Assistant (SSMA) is a free supported tool from Microsoft that simplifies database migration process from Access to SQL Server. SSMA for Access automates conversion of Microsoft Access database objects to SQL Server database objects, loads the objects into SQL Server, and then migrates data from Microsoft Access to SQL Server. 

 SSMA for Access v5.3 is designed to support migration from Microsoft Access 97 and higher to all editions of SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 and SQL Server 2014. 

System Requirements
Supported Operating System
Windows 7, Windows 8, Windows Server 2003, Windows Server 2008 R2, Windows Server 2012 
•Windows 7, Windows 8.1, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2, Server 2012.


Requirements for the SSMA for Access client:  •Microsoft Windows Installer 3.1 or a later version.
•The Microsoft .NET Framework version 3.5 or a later version. You can obtain it from the .NET Framework Developer Center.
•Access to and sufficient permissions on the computer that hosts the target instance of SQL Server.
•DAO provider version 12.0 or 14.0. You can install DAO provider from Microsoft Office 2010/2007 product or download it from Microsoft web site.
•Microsoft SQL Server Native Client (SNAC) version 10.5 and above. You can install SNAC from Microsoft SQL Server web site as part of SQL Server Feature Pack.
•4 GB RAM.


Install Instructions
After the download, you must extract the installation files before you can install SSMA for Access. 
Installing the SSMA for Access Client 1.Double-click SSMA for Access.exe.
2.On the 'Welcome' page, click Next.
3.If you do not have the prerequisites installed, a message will appear that indicates that you must first install required components. Make sure that you have installed all prerequisites, and then run the installation program again.
4.Read the End User License Agreement. If you agree to the terms, select "I accept the agreement" option and click Next.
5.Read the 'Usage Report Settings' page, select or clear the feature reporting box, and then click Next.
6.On the 'Choose Setup Type' page, click Typical.
7.Click Install.


Additional Information
Licensing: SSMA is a FREE download, and is available for use by any customer or partner with no charge or any obligations. 



分享