用SQL脚本将Access导入到MS SQL 2000/2005的方法

      上次介绍了Access 导入 MSSQL 2000/2005 数据库工具,不过,在使用这个工具时还是有一些地方需要注意的,我把整个导入过程记录了下来,算是笔记吧,希望对其他人有所帮助。

 

      由于CooSel2.0 CreateSQL这个工具相当不错,能够将Access的数据库表的结构转换成SQL Server的更加复杂的结构,也就是数据库的升迁,你不必担心由于Access的结构与SQL Server的不同而产生错误!因此,我们不需要做任何手工改动与设置,直接使用该工具生成SQL脚本后,放到SQL Server中执行查询即可。当然该工具还提供了生成ASP文件以及直接导入SQL Server方式,笔者推荐使用SQL脚本,这样便于修改脚本内容。

 

      我想在SQL Server中执行SQL脚本应该就不用再说了吧,如果这个还不会,那你就应该在虚拟机里多操练操练,服务器可不是闹着玩的,等你熟悉了SQL Server的操作方式后,再看下面的内容。

 

      我们尝试来分析一下使用CooSel2.0 CreateSQL生成的SQL脚本,通过修改,才能符合我们的需求(比如仅创建数据库而不添加用户)。我们现在创建一个测试数据名为data.mdb,添加2个表,并添加几个测试字段。

 

      在脚本头部,我们看到这几行:

 

Create Database [data]
go
use [data]
go

 

      显然,这里是在SQL Server中创建一个数据库,名为data,然后使用这个数据库。如果我们已经自行创建好了,可以把开头的2行去掉,只留下use这2行就可以了。

 

exec sp_addlogin 'data_login','123','data'
go
exec sp_adduser 'data_login','data_login','db_owner'
go

 

      这里是创建SQL登录帐号,这些是在你用CooSel2.0 CreateSQL创建脚本时输入的,当然如果你不需要创建的话,可以随便输入,然后把这里几行删除。不过记得给你的用户添加映射。

 

--[data]:

CREATE TABLE [dbo].[data] (
    [ID] integer IDENTITY (1,1) not null,
   [字段1] nvarchar(255) null ,
   [字段2] integer null
) ON [Primary]
go


–这里可能还有其他表

–[data]:

Alter TABLE [dbo].[data] WITH NOCHECK ADD CONSTRAINT [PK_data] Primary Key Clustered ([ID] ) ON [Primary]
go

–这里可能还有其他表从这里开始就正式开始创建数据库中的表结构了,这些我们不需要改动,如果你已经创建好了结构,那么可以把这块也删除了。在Access数据库中有几个表,就会有几块这样的语句。

 

--[data]:
SET IDENTITY_INSERT [dbo].[data] ON
go

INSERT INTO [dbo].[data] ([ID],[字段1],[字段2])
SELECT [ID],[字段1],[字段2]
FROM OPENDATASOURCE(’Microsoft.Jet.OLEDB.4.0′,’Data Source=”C:/data.mdb”‘)…[data]
go

SET IDENTITY_INSERT [dbo].[data] Off
go

      这里可能还有其他表这里是插入数据的地方,会读取Access数据库中每个表中的数据然后插入到SQL Server中的相应的表中。其中Data Source=你Access在硬盘中的位置,如果是虚拟主机的话,用个ASP的探针就能很容易看到自己站点所在目录了。

 

      好了,一个完整的SQL脚本我们就全部分析完了,你可以根据你的情况来删除不需要的部分。

      如果你在执行SQL脚本以后,出现如下错误:

 

SQL Server 2005:
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource'
的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。

 

      系统管理员可以通过使用 sp_configure 启用
'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL
Server 联机丛书中的 "外围应用配置器"。那么说明你的SQL Server的Ad Hoc Distributed Queries没有开启,需要在你的SQL脚本顶部添加:

 

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;


      GO再次执行你的SQL脚本,如果你是使用的最高权限帐号(Windwos模式或SA帐号),应该是成功的。
      如果提示:

 

服务器: 消息 15247,级别 16,状态 1,过程 sp_configure,行 170
用户没有执行此操作的权限。
服务器: 消息 5812,级别 14,状态 1,行 1
您没有运行 RECONFIGURE 语句的权限。
服务器: 消息 15123,级别 16,状态 1,过程 sp_configure,行 79
配置选项 'Ad Hoc Distributed Queries' 不存在,也可能是高级选项。

SQL Server 2000提示:
已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。说明你的帐号权限不够,需要SQL Server用户具用SystemAdministrators”服务器角色”。

 

      如果是虚拟主机,那么就麻烦你的空间商帮你做这些吧。


      本文来自: Steve Luo's Blog   原文地址:http://www.steveluo.name/use-sql-access-to-mssql

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
不知道是1.05还是1.06了,文档中说明是1.05,使用时exe文件上是1.06…… 以下为档案中的使用说明 CooSel2.0 CreateSQL V1.05 档案包含 ASP 和 Exe 两个版本 Asp版本不支持直接导入SQLserver,只支持脚本的编写 Exe 版本可以直接导入SQLserver 功能: 生成升迁 SQL脚本,保存为 *.sql文件后,SQL2000的查询分析器里调入执行 生成升迁 ASP脚本,这样你可以用该脚本和相应MDB数据库上传到服务器在线升迁 直接执行Access数据导入SQL2000服务器(表结构和数据) V1.03 版本修正 bit 类型在默认数值不能正常转换的问题 时间默认值增加转换 time() date() 为 getdate() 视图的Vba函数未作处理,稍候版本会推出支持对应SQLserver的T-SQL转换 V1.04 支持输入建库和登陆创建 支持Access直接导入SQL V1.05 版本添加直接导入SQLserver功能 添加导入选项 全部表 索引 按Unicode编码导入,是否生成导入数据等 修正默认值处理外围单双引号的问题,Access的默认值包围是没有单引号的,有的错误以为比如设置为空字符为 '' 对access来说是错误的,不等同于SQLserver中的(''),导入程序对此自动修正 V1.05找了很多论坛和整站数据库作了测试,都成功导入 程序生成从 Access2000 MDB 数据库SQL server的升迁脚本(表结构和数据) 包括默认,索引主键外键视图 和整个MDB库里的表 ---------------- 源码编制: MiscroSoft Visual Basic 6.0 编译环境: windows2000 server 2.00.2195 SP4 如果提示 COMDLG32.OCX 版本过期 用随程序提供的 COMDLG32.OCX 替代 windows\system32\COMDLG32.OCX 下的 或者运行regocx.exe 重注册一下COMDLG32.OCX控件 注意备份源文件名,微软的文件选取对话框控件 ------------------------------------------------------ 详情请关注经典论坛数据库版和Paintblue.net的程序发布区 程序编制: V37 paintblue.net (2004-11-20) 版权所有: paintblue.net | blueidea.com 无论商业还是免费,你可以自由使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宁宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值