设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

[技巧]Access To Sql server,将 Access 数据库转换为 SQL Server 几种方法

2015-4-13 10:12| 发布者: 盗梦| 查看: 1589| 评论: 1|原作者: 盗梦

摘要: 最近做了很多Access迁移到Sql server的尝试,经过多种比较,发布有很多种方法转换,但各种方法都有其优缺点,经过对比,发现最好的方法应该还是Access自带的升迁功能,转换最为完美以下有些内容是摘录g_yuanbo的博客 ...

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

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

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

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

  • 保留数据库结构,包括数据、索引和默认设置。
  • 自动将 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 2000,然后运行升迁向导。
  • 使用 SQL Server 数据转换服务 (DTS) 将数据从 Access 数据库导入到 SQL Server数据库。有关 DTS DTS 导入向导的更多信息,请参见 SQL Server 7.0 联机丛书中的“Data Transformation Services”(数据转换服务)和“Using the Import and Export Wizards”(使用导入和导出向导)主题。有关示例,请参见 SQL Server 联机丛书中的“Importing Data from an Access Database Example”(从 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

在 Access 2000 中,指向“文件”菜单上的“新建”,然后单击“从现有数据库新建项目”。此选项可创建一个自动数据处理 (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:

  • Designing Efficient Applications for Microsoft SQL Server(为 Microsoft SQL Server 设计高效的应用程序):此白皮书解释了为什么索引顺序访问方法 (ISAM)应用程序设计不适合于 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)

  • Migrating Your Microsoft Access Database to SQL Server 7.0(将 Microsoft Access 数据库迁移到 SQL Server 7.0):此白皮书介绍了该升迁向导,包括有关此向导的设计更改和局限方面的信息。

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”(溢出)错误消息





方法二:

 第一步:配置数据源

  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语句的定义。




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

相关阅读

发表评论

最新评论

引用 盗梦 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语句的定义。




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



查看全部评论(1)

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-20 15:53 , Processed in 0.087726 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部