Office中国论坛/Access中国论坛

标题: [技巧]Access To Sql server,将 Access 数据库转换为 SQL Server 几种方法 [打印本页]

作者: 盗梦    时间: 2015-4-13 10:10
标题: [技巧]Access To Sql server,将 Access 数据库转换为 SQL Server 几种方法
本帖最后由 盗梦 于 2015-4-13 10:16 编辑

最近做了很多Access迁移到Sql server的尝试,经过多种比较,发布有很多种方法转换,但各种方法都有其优缺点,经过对比,发现最好的方法应该还是Access自带的升迁功能,转换最为完美

以下有些内容是摘录g_yuanbo的博客内容

方法一:直接Access自带的升迁功能

将 Access 数据库转换为 SQL Server 的最简便方法是使用升迁向导。升迁向导:

要在 Access 2000 2003 2007 2010 中运行升迁向导,请在“工具”菜单上,指向“数据库实用工具”,然后单击“升迁向导”。

要在 Access 97 中使用升迁向导,则必须首先从下面的 Microsoft 网站下载 Microsoft Access 升迁工具 97:

http://www.microsoft.com/downloads/details.aspx?familyid=f5c7a907-7c5f-46cb-9157-a1ec4e96083d&displaylang=en (http://www.microsoft.com/downloads/details.aspx?familyid=f5c7a907-7c5f-46cb-9157-a1ec4e96083d&displaylang=en)


要从 Access 97 运行升迁向导,请在“工具”菜单上,指向“外接程序”,然后单击“升迁到SQL Server”。

如果您使用的是 Access 的早期版本,则可以使用以下两个方法之一:

如果将 Access 97 到 Access 2003 与 SQL Server 2005 一起使用,也可使用 SQL Server Migration Assistant for Access。有关 SQL Server Migration Assistant for Access的更多信息,请访问下面的 Microsoft 网站:

http://www.microsoft.com/sql/solutions/migration/default.mspx(http://www.microsoft.com/sql/solutions/migration/default.mspx)

Access 2000 2002 2003

在 Access 2000 2002 2003 中,指向“文件”菜单上的“新建”,然后单击“从现有数据库新建项目”。此选项可创建一个自动数据处理 (ADP) 应用程序。此应用程序会自动将 SQL Server 桌面引擎(也称为 MSDE 2000)或 SQL Server 用作服务器,并将 ADP 文件用作应用程序。


注意:当您运行从 Access 97 或 Access 2000 到 SQL Server 2000 的升迁向导时,可能会收到“溢出”错误。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

279454  (http://support.microsoft.com/kb/279454/ ) ACC97:尝试升迁到 SQL Server 2000 时出现“Overflow”(溢出)错误消息

272384  (http://support.microsoft.com/kb/272384/ ) 尝试升迁到 SQL Server 2000 时出现“Overflow”(溢出)错误消息

有关 Access 2000 和 SQL Server 2000 之间问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

269824  (http://support.microsoft.com/kb/269824/ ) Access 2000 项目 (*.adp) 和 SQL Server 2000 之间不兼容问题的说明

下面的白皮书可帮助您将 Access 应用程序导入 SQL Server:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsqlsg/html/msdn_designeff.asp(http://msdn.microsoft.com/librar ... /msdn_designeff.asp)

http://www.microsoft.com/technet/prodtechnol/sql/70/deploy/access.mspx(http://www.microsoft.com/technet ... /deploy/access.mspx)

Access 97

有关 Microsoft Access 升迁工具 97 的更多信息,请访问下面的 Microsoft 网站:

http://www.microsoft.com/downloads/details.aspx?familyid=f5c7a907-7c5f-46cb-9157-a1ec4e96083d&displaylang=en(http://www.microsoft.com/downloads/details.aspx?familyid=f5c7a907-7c5f-46cb-9157-a1ec4e96083d&displaylang=en)

要下载 Microsoft Access 升迁工具 97,请访问下面的 Microsoft 网站:

http://www.microsoft.com/downloads/details.aspx?FamilyID=f5c7a907-7c5f-46cb-9157-a1ec4e96083d (http://www.microsoft.com/downloads/details.aspx?FamilyID=f5c7a907-7c5f-46cb-9157-a1ec4e96083d)

有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

176614  (http://support.microsoft.com/kb/176614/ ) ACC97:Microsoft Access 97 升迁工具可用

279454  (http://support.microsoft.com/kb/279454/ ) ACC97:尝试升迁到 SQL Server 2000 时出现“Overflow”(溢出)错误消息




作者: 盗梦    时间: 2015-4-13 10:10

方法二:

 第一步:配置数据源

  1.在‘控制面板→管理工具’里选择‘数据源’,在弹出的页面选择‘用户DSN’(默认)。

  2.点击旁边的‘添加’按钮,在弹出的页面选择‘Driver do Microsoft Access (*.mdb)’,然后点击‘完成’。

  3.在弹出的‘ODBC Microsoft Accecc 安装’页面,在‘数据源名’文本输入框填写一个名称(自定义),‘说明’文本 框不用输入。然后点击下面的‘选择’按钮,选取Access文件所在的路径。

  4.点击旁边的‘确定’按钮,这是会在‘用户DSN’选项卡的‘用户数据源’下多出你刚才添加的数据源,名称就是刚才填写的‘数据源名’。然后点击‘取消’退出页面。数据源配置完成。

  第二步:在数据库原程序引用

  1.在‘开始’菜单打开‘Microsoft SQL Server 2005→SQL Server Management Studio’。

  2.新建一个数据库(名称自定义),选择新建的数据库点击右键选择‘任务→导入数据’。

  3.在弹出的页面点击下一步,‘数据源’选择‘Microsoft Access’,然后选择Access数据库所在的路径,如果Access数据库有用户名和密码就需要填写,如果没有就不用填写。点击‘下一步’。

  4.在弹出的页面,‘数据源’可以安默认的不动。‘服务器名称’及‘身份验证’要和登录时的服务器及身份验证一样(如果不一样,在下面的数据库下拉框里找不到刚才新建的数据库)。在下面的数据库下拉框选择新建的数据库(如果没有新建的数据库,点击后面的刷新按钮。如果还是没有就检查服务器名称’及‘身份验证’是否正确)。可以点击后面的‘新建’。点击‘下一步’。

  5.在弹出的页面,按照默认选择第一项(复制一个或多个表或视图的数据)。点击‘下一步’。

  6.在‘选择源表和源视图’页面,选中要导入的表和视图。(可以点击‘预览’查看表中的数据)点击‘下一步’。

  7.按照默认‘立即执行’,点击‘下一步’。

  8.点击‘完成’。

数据修改 (主要针对方法二,方法一转化后基本没问题)
1,由于SQL2000里面没有“自动编号“,所以你的以“自动编号“设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的“标示“选择“是“,种子为“1“,增量为“1“,
2,另外,ACCESS2000转换成SQL2000后,原来属性为“是/否“的字段将被转换成非空的“bit“,这时候你必须修改成自己想要的属性了;
3.默认值修改
4.另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.
ACCESS改为SQL需要注意哪几个地方
数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。
所有的默认值都丢失了。主要是数字类型和日期类型。
所有now(),time(),date()要改成getdate()。
所有datediff(‘d‘, time1, time2)要改成datediff(day, time1, time2)
有可能一些true/false类型不能使用,要变为1/0。
备注类型要通过cast(column as varchar)来使用。
CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。
isnull(rowname)要改成rowname = null
ACCESS的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!
转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功。
对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:“delete * from user where id=10“,而对SQL SERVER数据库进行删除是用:“delete user where id=10“.
日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
在SQL Server 2005中设置自动编号字段
①像Access中的自动编号字段
右键你的表-->设计表-->找到你的id字段(类int型)-->标识-->是-->标识种子(初始值)-->标识递增量-->OK
②用IDENTITY (SEED,INCREMENT)参数
seed -启始值
increment -增量
CREATE TABLE 表名(你的ID IDENTITY (1, 1) NOT NULL ,你的其他字段... )
CREATE TABLE 表名(你的字段ID AUTOINCREMENT(1000,10),其他字段... )
③修改起始值和步进值
ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(2000,50)
④让一个删空的表自动增加字段的开始值重新从1开始
ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(1,1)
上述3 4只适用与Access,COUNTER为其一种数据类型,可以在Access中指定一不是自动编号的字段为自动编号字段,也可以让一自动编号字段重新从指定值按指定步长自动编号。但是如果表中有数据,用户不能用该语句来将该列的数据类型改变为COUNTER 数据类型。对于SQL Server并不支持。
对于SQL Server我们或许总希望用Alter Table 表名 Alter Column 你的字段 IDENTITY(1,1)
来指定字段重新从1开始计数,但是这句话本身是错误的,好长时间我也疑惑为什么这句话不能执行。如果我们看看MS 对Alter Table语句的定义就清楚了,这句话根本是错误的。下面是MS对Alter Table语句的定义。
[attach]56104[/attach]
[attach]56105[/attach]


可以看到,IDENTITY只是在< column_definition >中,也就是说,我们可以这样使用
Alter Table 表名 Add 字段名 Int IDENTITY(1,1)
即,我们可以增加一个字段并指定它为自动编号字段。但是不能更改一个字段为自动编号字段(也或许我没找到方法)。即,如果我们想给表增加自动编号字段,只能使用添加字段的方法,而不能更改一个已有的字段为自动编号字段。
至于如果需要更改自动编号字段计数起始值可以使用DBCC命令:
DBCC CHECKIDENT (表名,RESEED,100)
自动编号字段下一个从101开始计。








欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3