MYSQL编程:ACCESS转SQL必要注重的成绩
到2009年,甲骨文的数据库Oracle已经诞生了30周年,而MySQL却连它的一半时间都没有。微软的SQLServer仅仅比MySQL大两年,但是SQLServer的发布是建立在Sybase的基础上。access|成绩良多伴侣想用SQL2000数据库的编程办法,可是却又苦于本人是学ACCESS的,对SQL只是一点点的懂得罢了,这里我给人人供应以下参考---将ACCESS转化成SQL2000的办法和注重事项一,起首,我说的是在ACCESS2000,SQL2000之间转换,其他的我也还没有实验过,但愿人人多多实验,一定是有举措的;
二,转换的办法
1,翻开”把持面板“下”办理工具“中的”数据库源“;
2,按”增加“增加一个新的数据源,在选择栏里选”DriverdomicrosoftAccess
(*.mdb)”,完成后将呈现一个框,
在”数据库源“内里输出你想写的称号,我取名叫“ABC”,申明不必要填,接着,按上面的选择,寻觅你的数据库地点和选中(注重,请先备份本人的ACCESS数据库),然后断定。
数据源在这里建好了,剩下转换了。
3,翻开SQL2000企业办理器,进进数据库,新建一个空的数据库“ABC”;
4,选择新创建的数据库,按鼠标右键,选择“一切义务”下“导进数据”,按“下一步”持续;
5,在数据库源下拉但当选择”DriverdomicrosoftAccess(*.mdb)“,在”用户/体系DSN“中,选种你方才增加的”ABC“,按”下一步“;
6,“目标”不必要修正,选择服务器(一样平常下为本人的本机"local",也能够选择服务器地点大概局域网地点,断定你的权限是不是能够操纵,),"利用WINDOWS身份考证"指用本人的体系办理员身份操纵,"利用SQL身份操纵考证"能够用于网站的操纵,保举用后者;
7,选上"利用SQL身份操纵考证"后,填写你的用户名和暗码,我本人选择的是体系默许号码"sa","****",数据库选择刚新建的"ABC",按"下一步";
8,这一步的两个单项选择,"从数据源复制表和视图"与"用一条查询指令指定要传输的数据",选择前者,按"下一步"持续;
9,这里将呈现你本人ACCESS数据库的表,按"全选"后,下一步;
10,"DTS导进/导出导游",看"当即运转"被选中按"下一步",
11,按"完成"持续;
12,这个步骤你将看到你的数据被导进SQL2000内里,当呈现"已乐成把XXX个表导进到数据库"的字样,并且一切的表后面都有绿色的勾,就暗示乐成导进一切数据,假如半途呈现成绩大概表后面有白色的叉的话,申明该表没有乐成导进,这时候就要归去检察本人的操纵是不是准确了.
三,数据修正
1,因为SQL2000内里没有"主动编号",以是你的以"主动编号"设置的字段城市酿成非空的字段,这就必需手工修正这些字段,并把他的"标示"选择"是",种子为"1",增量为"1",
2,别的,ACCESS2000转换成SQL2000后,本来属性为"是/否"的字段将被转换成非空的"bit",这时候候你必需修正成本人想要的属性了;
3,别的,人人要注重对工夫函数的掌控.ACCESS与SQL是有良多分歧的.
4、相干的字段成绩
1.ACCESS的数据库中的主动编号范例在转化时,sqlserver并未将它设为主动编号型,我们需在SQL创立语句中加上identity,暗示主动编号!
2.转化时,跟日期有关的字段,SQLSERVER默许为smalldatetime型,我们最好将它变成datetime型,由于datetime型的局限比smalldatetime型年夜。我碰见这类情形,用smalldatetime型时,转化失利,而用datetime型时,转化乐成。
3.对此两种数据库举行操纵的sql语句不全不异,比方:在对ACCESS数据库举行删除记录时用:"delete*fromuserwhereid=10",而对SQLSERVER数据库举行删除是用:"deleteuserwhereid=10".
4.日期函数不不异,在对ACCESS数据库处置中,可用date()、time()等函数,但对SQLSERVER数据库处置中,只能用datediff,dateadd等函数,而不克不及用date()、time()等函数。
5.在对ACCESS数据库处置中,sql语句中间接能够用一些VB的函数,像cstr()函数,而对SQLSERVER数据库处置中,却不克不及用。
5、相干语句成绩
主动增添字段必要重写。在access中常常利用的主动编号字段,导进到mssql后,他并非自增型的int,必要手工设置,把导进后的主动编号字段的标识的“否”改成“是”,“种子”和“递增量”都为“1”,才干成为主动编号
一切的默许值都丧失了。次要是数字范例和日期范例
一切now(),time(),date()要改成getdate()
一切datediff(d,time1,time2)要改成datediff(day,time1,time2)
一切datediff(ww,time1,time2)要改成datediff(week,time1,time2)
一切datediff(d,time1,time2)要改成datediff(day,time1,time2)
在mssqlserver中,有很多保存字,在access中是没有的,当你把数据导进到mssql的时分,成绩就出来了。mssql在导进的时分,会主动给这些字段(包含数据库中的表名)加上“[字段名]”,因而,你必需修正你的剧本,把响应的字段名字(大概表名字)加上中括号,或改动字段名字为不是mssql的保存字
在用access关于工夫的利用,人人喜好利用“select*fromaaaawhiletime="&now()”如许的sql语句,但是,在mssql中没有“now()”这个函数,而是利用“getdate()”,以是,一切的sql语句中的“now()”必需换成“getdate()”。
日期函数不不异,在对ACCESS数据库处置中,可用date()、time()等函数,但对
SQLSERVER数据库处置中,只能用datediff,dateadd等函数,而不克不及用date()、time()等函数。
转化时,跟日期有关的字段,SQLSERVER默许为smalldatetime型,我们最好将它变成datetime型,由于datetime型的局限比smalldatetime型年夜。偶然用smalldatetime型时,转化失利,而用datetime型时,转化乐成
isnull(rowname)要改成rowname=null
CursorType要改成1,也就是翻开数据库时要给出第一个数字参数为1,不然纪录大概
显现不完全
备注范例要经由过程cast(columnasvarchar)来利用
true/false范例不克不及利用,要变成1/0
对此两种数据库举行操纵的sql语句不全不异,比方:在对ACCESS数据库举行删除记录时用:"delete*fromuserwhereid=10",而对SQLSERVER数据库举行删除是用:"deleteuserwhereid=10".
在对ACCESS数据库处置中,sql语句中间接能够用一些VB的函数,像cstr()函数,而对SQLSERVER数据库处置中,却不克不及用
在access的sql语句中的工夫利用变量查询的时分,人人一样平常利用"select*fromaaaawhiletime=#"&变量名&"#",在mssql中是不可的,他的语法是“select*fromaaaawhiletime="&变量名&""”。(意义是让你把日期工夫变量当做字符串来利用,呵呵~~~)
本来ASP里的“DELETE*FROM……”要改成“DELETEFROM……”
有大概rs.update失利,修正成update表名set字段=‘值’如许经由过程(碰到的情形,提醒为:
MicrosoftOLEDBProviderforSQLServer毛病80040e38
悲观并发反省失利。已在此游标以外修正了该行。
/Admin_ClassOrder.asp,行164)
access内里除法可使用""大概"/",MSSQL内里只能利用"/"
当然,或许这并不是我们拒绝MySQL的一个有说服力的MySQL学习教程,但是对于一些比较守旧的IT经理来说,在为一些关键业务选择平台的时候,平台的成熟性却是必须要考虑的一个因素,在这一点上,MySQL无疑毫无优势。 现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层. 连做梦都在想页面结构是怎么样的,绝非虚言 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页:
[1]