LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Access转SQL Server数据库的经验漫谈

admin
2010年7月31日 15:39 本文热度 4387

以下的文章主要描述的是access转sql server数据库的几个经验漫谈,access数据库作为一个中小型的单机数据库系统,在承担访问量、数据量大的网站应用时,往往就不堪重负了。一般认为。

超过50m的access数据库性能就开始明显下降,超过100m以后,出错、运行慢的问题会更加突出。而我的blog数据库已达到了四百多兆,痛定思痛,决定升级为sql server 2005。

这其中,走了好些弯路,起初我是直接利用企业管理器把access导入sql中,发现sqll数据库表是没有自动字段的,原来access中的自动字段被转换成了普通字段,需要手工改成标识类型,增量为1。 所有的时间字段,如果定义了默认值,那么原来是now(),现在需要改成getdate() 。原来字段的默认值都不会自动引入,需要对照原表的字段手工添加。注释在access项目或sqlserver数据库中,前缀“n”代表“国家/地区”,意思是这个数据类型是启用unicode的。在access数据库中,全部文本列在默认情况下都是启用unicode的。真费了我,好些光景。

如此这般数据库可以调用,程序将就着能运行了,但发现,原来的程序运行起来错误百出。

原来,access与sql程序中使用到的sql查询语句大体差不多,但是有一些微妙的差别,正是这些差别,造成了程序的不通用,一般要修改的部分如下:

(1)时间函数的问题:sql数据库的时间函数与access不同,最常见的是取现在时间的函数,access是now(),sql是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函数在asp程序本身也要使用,凡是不在sql server数据库查询或执行语句中使用的now()函数千万不要改。

(2)时间比较函数:datediff('d','时间1',‘时间2’)这是access查询用的格式,sql中这些引号都要去掉,同时时间格式的前后可能加上了#,这也要去掉。同样这也是指在sql语句中的,在asp语句中的要保持原样。

(3)空值的表示:在access中,判断空值一般用是否=""来表示,但是这在sql中往往出错,如果遇到出错的问题或者程序运行不正常,可以改成如这样判断:where (name is null)

(4)真假值判断:access中可以用=true、=false来判断,但是在sql中就会出错,因此在sql查询或执行语句中这类判断要分别改成=1、=0。注意一点:有些程序虽然写成=“true”,但是由于有引号,所以这个字段是字符类型的,你不能改成=1,保持原样即可。

(5)在对access数据库进行删除纪录时用:"delete * from user where id=10",而对sql server数据库进行删除是用:"delete user where id=10"。

(6)在对access数据库处理中,sql语句中直接可以用一些vb的函数,像cstr()函数,而对sql server数据库处理中,却不能用。

调试程序经常遇到的出错的语句是:conn.execute(sql),注意这句本身是没有错的,错误原因是里面的这个sql字符串,要向上看这个sql字符串是如何生成的,按照上面所说的程序修改办法修改。

最后向大家推荐一款工具,可以直接生成生成升迁 sql脚本,保存为 *.sql文件后,sql2000的查询分析器里调入执行,可以生成升迁 asp脚本,这样你可以用该脚本和相应mdb数据库上传到服务器在线升迁,可以直接执行access数据导入到sql服务器(表结构和数据)。

程序下载:coosel2.0 createsql v1.06

程序编制: v37 paintblue.net (2004-11-20)

版权所有: paintblue.net │ blueidea.com

无论商业还是免费,你可以自由使用

1.access的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在sql创建语句中加上identity,表示自动编号!

2.转化时,跟日期有关的字段,sql server默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。我遇见这种情况,用smalldatetime型时,转化失败,而用datetime型时,转化成功。

3.对此两种数据库进行操作的sql语句不全相同,例如:在对access数据库进行删除纪录时用:"delete * from user where id=10",而对sqlserver数据库进行删除是用:"delete user where id=10".

4.日期函数不相同,在对access数据库处理中,可用date()、time()等函数,但对sql server数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。

5.在对access数据库处理中,sql语句中直接可以用一些vb的函数,像cstr()函数,而对sql server数据库处理中,却不能用。


该文章在 2010/7/31 15:41:19 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved