1---------------首先是數據類型的轉換
bit型,datetime,varchar,nvchar,自動編號等、
2------------然後是一些函數的使用
主要是日期函數
access可以使用date(),now()來獲取日期
sql2008用getdate()獲取
並且有時候需要用格式轉換
datadiff函數用法也不相同主要是單引號和#號的不同
3----------------sql語句不同
like中的%用法,top用法略有不同top主要是單引號不同
----------------------------------------------------------------------------------------------------------------------------------
以下內容為轉載
很多朋友想用SQL2008数据库的编程方法,但是却又苦于自己是学ACCESS的,对SQL只是一点点的了解而已,这里我给大家提供以下参考---将ACCESS转化成SQL2008的方法和注意事项
一,首先,我说的是在ACCESS2000,SQL2008之间转换,其他的我也还没有尝试过,希望大家多多试验,肯定是有办法的;
二,转换的方法
1,打开 控制面板 下 管理工具 中的 数据库源 ;
2,按 添加 添加一个新的数据源,在选择栏里选 Driver domicrosoft Access
(*.mdb) ,完成后将出现一个框,
在 数据库源 里面输入你想写的名称,我取名叫 ABC ,说明不需要填,接着,按下面的选择,寻找你的数据库地址和选中(注意,请先备份自己的ACCESS数据库),然后确定。
数据源在这里建好了,剩下转换了。
3,打开SQL2008企业管理器,进入数据库,新建一个空的数据库 ABC ;
4,选择新建立的数据库,按鼠标右键,选择 所有任务 下 导入数据 ,按 下一步 继续;
5,在数据库源下拉但中选择 Driver domicrosoft Access(*.mdb) ,在 用户/系统DSN 中,选种你刚才添加的 ABC ,按 下一步 ;
6, 目的 不需要修改,选择服务器(一般下为自己的本机 local ,也可以选择服务器地址或者局域网地址,确定你的权限是否可以操作,), 使用WINDOWS 身份验证 指用自己的系统管理员身份操作, 使用SQL身份操作验证 可以用于网站的操作,推荐用后者;
7,选上 使用SQL身份操作验证 后,填写你的用户名和密码,我自己选择的是系统默认号码 sa , **** ,数据库选择刚新建的 ABC ,按 下一步 ;
8,这一步的两个单项选择, 从数据源复制表和视图 与 用一条查询指令指定要传输的数据 ,选择前者,按 下一步 继续;
9,这里将出现你自己ACCESS数据库的表,按 全选 后,下一步;
10, DTS导入/导出向导 ,看 立即运行 被选中按 下一步 ,
11,按 完成 继续;
12,这个步骤你将看到你的数据被导入SQL2000里面,当出现 已经成功把XXX个表导入到数据库 的字样,而且所有的表前面都有绿色的勾,就表示成功导入所有数据,如果中途出现问题或者表前面有红色的叉的话,说明该表没有成功导入,这时就要回去查看自己的操作是否正确了
三,数据修改
1,由于SQL2008里面没有 自动编号 ,所以你的以 自动编号 设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的 标示 选择 是种子为 1 ,增量为
2,另外,ACCESS2000转换成SQL2008后,原来属性为 是/否 的字段将被转换成非空的 bit ,这时候你必须修改成自己想要的属性了;
3,另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.
ACCESS改为SQL需要注意哪几个地方
数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。
所有的默认值都丢失了。主要是数字类型和日期类型。
所有now(),time(),date()要改成getdate()。
所有datediff(‘d’,time1, time2)要改成datediff(day,time1, time2)
有可能一些true/false类型不能使用,要变为1/0。 bit
备注类型要通过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()等函数。
在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。
***********************************************************************************************************
这几天一连三个程序由ac转sql,总结了一下这三个程序转换中遇到的问题,归纳了以下注意点
自动增加字段需要重写。在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)
在mssql server中,有许多保留字,在access中是没有的,当你把数据导入到mssql的时候,问题就出来了。mssql在导入的时候,会自动给这些字段(包括数据库中的表名)加上 [字段名] ,因此,你必须修改你的脚本,把相应的字段名字(或者表名字)加上中括号,或改变字段名字为不是mssql的保留字
在用access关于时间的使用,大家喜欢使用 select * from aaaa while time="&now() 这样的sql语句,然而,在mssql中没有 now() 这个函数,而是使用 getdate(),所以,所有的sql语句中的 now() 必须换成 getdate() 。
日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对
SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功
isnull(rowname)要改成rowname = null
CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能
显示不完整
备注类型要通过cast(column as varchar)来使用
true/false类型不能使用,要变为1/0
对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete * from user where id=10",而对SQL SERVER数据库进行删除是用:"delete user where id=10".
在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用
在access的sql语句中的时间使用变量查询的时候,大家一般使用"select * from aaaa while time=#"&变量名&"#",在mssql中是不行的,他的语法是 select * from aaaa while time=’"&变量名&"’"。(意思是让你把日期时间变量当成字符串来使用,呵呵~~~)
原来ASP里的 Delete * FROM …… 要改为 Delete FROM ……
有可能rs.update失败,修改成update 表名 set 字段=‘值’ 这样通过(遇到的情况,提示为:
Microsoft OLE DB Provider for SQL Server 错误 ’80040e38’
乐观并发检查失败。已在此游标之外修改了该行。
/Admin_ClassOrder.asp,行 164 )
access里面除法可以使用"\"或者"/",MSSQL里面只能使用"/"
1.mdb中的ID到了Access会变成普通的int,要重新设置为 标识 。
2.SQL语句中的now()要改成getdate()。
3.SQL语句中Like后面字符串的通配符'*'要改成'%'。
4、access表内数据类型"是/否",到了sql server的表内就是 bit (not null)
5、access查询通过cdate构造日期,sql server内是convert(datetime,...)
6. 在sql server 里,就我使用的经验来看: '2004-5-29' =
convert(datetime,'2004-5-29')
7.数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用
decimal。
8.所有的默认值都丢失了。主要是数字类型和日期类型。
9.所有now(),time(),date()要改成getdate()。
10.所有datediff('d', time1, time2)要改成datediff(day, time1, time2)
11.有可能一些true/false类型不能使用,要变为1/0。
12.备注类型要通过cast(column as varchar)来使用。
13.CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能
显示不完整。
14.isnull(rowname)要改成rowname = null
15.ACCESS的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!
16.转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。我遇见这种情况,用smalldatetime型时,转化失败,而用datetime型时,转化成功。
17.对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete * from user where id=10",而对SQL SERVER数据库进行删除是用:"delete user where id=10".
18.日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对
SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
19.在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。
20:最好在有可能和系统关键字的地方使用 [ 和 ] 将他包围起来,以避免在移植过程中出现的运行错误问题