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

ACCESS转SQLSERVER后代码需要修改的语句

admin
2017年11月29日 15:26 本文热度 6307

1,对于日期字段字段 

 access表示为:#1981-28-12# 

 SQL SERVER表示为:‘1981-02-12‘

2,SQL语句区别

  select ,update 在对单表操作时都差不多,但多表操作时update语句有区别,ACCESS与SQLSERVER中的Update语句对比:

 SQLSERVER中更新多表的Update语句:

  Update Tab1 SET a.Name = b.Name  FROM Tab1 a,Tab2 b  Where a.ID = b.ID; 

 同样功能的SQL语句在ACCESS中应该是:

 Update Tab1 a,Tab2 b  SET a.Name = b.Name  Where a.ID = b.ID; 

 即:ACCESS中的Update语句没有FROM子句,所有引用的表都列在Update关键字后. 

 更新单表时:都为:

 Update table1 set ab=‘12‘,cd=444 where .... 

3,delete语句 

 access中删除时用:delete * from table1 where a>2 即只要把select 语句里的select 换成delete就可以了。 

 sqlserve 中则为: delete from table1 where a>2 即没有*号 

4,as 后面的计算字段区别 

 access中可以这样:select a,sum(num) as kc_num,kc_num*num as all_kc_num 即可以把AS后的字段当作一个数据库字段参与计算。 

 sqlserver 中则为:select a,sum(num) as kc_num,sum(num)*num as all_kc_num 即不可以把AS后的字段当作一个数据库字段参与计算。 

5,[.]与[!]的区别 

 access中多表联合查询时:select tab1!a as tab1a,tab2!b tab2b from tab1,tab2 ,中间的AS可以不要。 

 sqlserve 中则:select tab1.a as tab1a,tab2.b tab2b from tab1,tab2 ,中间的AS可以不要。 

6,联合查询时, 

   access中多表联合查询:‘select a,b from(select a,b from tab1 where a>3 union select c,d from tab2 ) group by a,b 

   sqlserve 中则‘select a,b from(select a,b from tab1 where a>3 union select c,d from tab2 ) tmptable group by a,b即要加一个虚的表tmptable,表名任意。--- 

7,access升级到sqlserver时,可以用sqlserver的数据导入工具导入数据,但要做必要的处理。 

  access中的自动编号,不会自动转换SQL中的自动编号,只能转换为int型,要把它手工改成标识字段,种子为1,把所有导入被sqlserver转化成的以n开头的字段类型的n去掉,如nvarchar->varchar.把需要有秒类型的日期字段改成datatime类型(SQL会把所有的日期开转化成smalldatetime型) 

8,true与1=1 

 access用where true表示条件为真

  sqlserver用where 1=1表示条件为真 

9,判断字段值为空的区别 

普通空: 

Access和sql server一样 where code is null 或 where code is nol null 

条件空: 

Access:iif([num] is null,0,[num]) 或 iif([num] is null,[num1],[num]) 

SQLServer: isnull([num],0) 或 isnull([num],[num1]) 

10,SQL语句取子串的区别 

access:MID(字段,n1,[n2]),LEFT(字段,n),RIGHT(字段,n) 

如:select left(cs1,4)+‘-‘+cs2 as cs3 

SQLServer: SUBSTRING(expression, start, length) 

如:select substring(cs1, 1, 2) + substring(cs1, 4, 2) + ‘-‘ + cs2 as cs3 

补充: 

ACCESS与SQL2000的SQL语句有区别的。

比如now()在SQL2000中必须改为getdate()。

还有关键词必须加[] ,像ACCESS中字段名用name,在SQL Server必须加[name] 否则出错。

数据库连接字重新配置

1. access 转sql 数据库后需要建立各表关键字以及递增量设置部分数据类型需要重新定义;

2. now() 函数是可接受的,但在日期比较过程中需要用 getdate();

3. 保留字需要加 [] ;

4. 单双引号需要转变;

5. 遵循标准sql定义(最关键的一条);

看看MS SQL Server联机丛书:

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

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

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

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

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


该文章在 2017/11/29 15:43:36 编辑过

全部评论1

admin
2017年11月29日 16:10
1、自动增加字段需要重写。在access中经常使用的自动编号字段,导入到mssql后,他并不是自增型的int,需要手工设置,把导入后的自动编号字段的标识的“否”改为“是”,“种子”和“递增量”都为“1”,才能成为自动编号。 
2、所有的默认值都丢失了。主要是数字类型和日期类型 
3、所有now(),time(),date()要改成getdate() 
4、所有datediff(’d’, time1, time2)要改成datediff(day, time1, time2) 
5、所有datediff(’ww’, time1, time2)要改成datediff(week, time1, time2) 
6、所有datediff(’d’, time1, time2)要改成datediff(day, time1, time2) 
7、在mssql server中,有许多保留字,在access中是没有的,当你把数据导入到mssql的时候,问题就出来了。mssql在导入的时候,会自动给这些字段(包括数据库中的表名)加上“[字段名]”,因此,你必须修改你的脚本,把相应的字段名字(或者表名字)加上中括号,或改变字段名字为不是mssql的保留字
8、在用access关于时间的使用,大家喜欢使用“select * from aaaa while time="&now()”这样的sql语句,然而,在mssql中没有“now()”这个函数,而是使用“getdate()”,所以,所有的sql语句中的“now()”必须换成“getdate()”。 
9、日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对 SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
10、转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功
11、isnull(rowname)要改成rowname = null 
12、CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整 
13、备注类型要通过cast(column as varchar)来使用 
14、true/false类型不能使用,要变为1/0 
15、对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete * from user where id=10",而对SQL SERVER数据库进行删除是用:"delete user where id=10". 
16、在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用 
17、在access的sql语句中的时间使用变量查询的时候,大家一般使用"select * from aaaa while time=#"&变量名&"#",在mssql中是不行的,他的语法是“select * from aaaa while time=’"&变量名&"’"”。(意思是让你把日期时间变量当成字符串来使用) 
18、原来ASP里的“Delete * FROM ……”要改为“Delete FROM ……” 
19、有可能rs.update失败,修改成update 表名 set 字段=‘值’ 这样通过 
20、access里面除法可以使用"\"或者"/",MSSQL里面只能使用"/" 
21、在SqlServer中建立主键 
22、如果还有问题用:rs.open sql,conn,3,2试试

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