« asp网站防注入代码JS Unicode在线加密与解密工具 »

Access 转成 MSSQL 2000/2005 数据库方法及工具

在安装依然主机管理系统时,因为当时导入MSSQL时有点问题,所以,为了赶快能用上管理功能,所以就暂时先用了Access数据库。不过一直以来都因为速度问题困扰不已,一直以为是由于ASP.Net的效率问题造成的。

不过一次在群里有位朋友说Access数据库是比较慢,改用MSSQL以后速度会有所改善。

于是开始设法将现有的Access数据库导入到MSSQL 2005中。以前也尝试导入过,但是用SQL Server自带的DTS服务直接导入(先用sql脚本创建好表结构,否则会丢失标识等),会出现下列错误:

- 执行之前 (错误)
消息
错误 0xc0202009: 数据流任务: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80040E21。
已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80040E21 说明:“多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。”。
(SQL Server 导入和导出向导)

错误 0xc0202025: 数据流任务: 无法创建 OLE DB 取值函数。请查看列元数据是否有效。
(SQL Server 导入和导出向导)

错误 0xc004701a: 数据流任务: 组件“目标 9 - yiran_order”(804) 在执行前阶段失败,返回的错误代码为 0xC0202025。
(SQL Server 导入和导出向导)而如果不用sql脚本创建结构的话,直接导入是没有问题的,这个问题在网上找了下,基本没有什么资料,而且国内用SQL Server 2005的人并不多,而且大多数开发者使用的都是Express版本,他们只注重一些开发上的问题,而对于服务器管理者来说,SQL Server 2005的技术资料并不对,因此这个问题是比较难解决的,毕竟我不是MCDBA,我只是个MCSE而已。
既然SQL Server自身的Managemeng Studio无法使用,那么我们就全部通过SQL脚本来解决,因为图形化管理器也只是将一系列的管理功能通过图形化界面来生成相应的SQL脚本来操作的罢了。

网上很辛苦地找到了一个工具~真是福音啊。这个工具的原理是通过对Access数据库的分析自动生成SQL脚本,可以包含数据,也可以只有结构。然后只要放到SQL Server中执行一下查询一个数据库就建好了。关于如何在SQL Server中执行脚本以及在执行脚本时可能会出现的一些问题,请参考用 SQL 脚本将 Access 导入 MSSQL 2000/2005 方法

 

下载:CooSel2.0 CreateSQL v1.06
(支持SQL Server 2000/2005)

可能解压后会提示缺少控件,COMDLG32.OCX这个文件本来并不在这个压缩包里,我是将2个合并了起来。这个应该是VB的空间,如果提示缺少这个的话就执行RegOCX.exe试试(这个我没试过~因为没提示缺少),不行就把COMDLG32.OCX复制到system32下看看吧。

如果你找到了更好的工具,也请告诉我一声吧呵呵~

上次介绍了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”服务器角色”。如果是虚拟主机,那么就麻烦你的空间商帮你做这些吧。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。