Access与sql server 语法差异

时间:2021-01-10 14:52:19
Access与sql server 语法
1、 select,update语句区别
select,update对于单表操作时基本一致。  
但多表操作时AccessSqlServer中的update语句会有差别:
SqlServer中更新多表的update语句:  
update Table1 seta.Name = b.Name from Table1 a, Table2 b where a.ID = b.ID;
Access中同样功能的sql语句:
update Table1 a, Table2 b set a.Name = b.Name where a.ID = b.ID;
比较得出:Access中的update语句没有from子句,所有引用的表都列在update关键字后
2、delete语句   
  SqlServer中:delete from <表名> where ID > 1;
   Access中: delete * from <表名>where ID > 1;
3、as后面的计算字段区别
 SqlServer中:
select sum(num) as sum_num, sum(num)*num as all_num from <表名>;
    Access中:    
select sum(num) as sum_num, sum_num*num  as all_num from <表名>;
比较得出:
SqlServer中:不可以把as后的字段当作一个数据库字段参与计算。
Access
中: 可以把as后的字段当作一个数据库字段参与计算。 
     SQL Server as可以省略,Access不能
4时间字段、日期分隔符号
    SqlServer中:单引号(’
select * from <表名> where RegDate = '2011-08-10'  
    Access中:要用#号分隔,转换为日期
select * from <表名>where 生日=#2011-08-10#
select * from <表名>where 生日=2011-08-10
select * from <表名>where 生日=CDate(#2011-08-10#)
select * from <表名>where 生日=CDate(2011-08-10)
select * from <表名>where 生日=CDate('2011-08-10')
5
、Boolean所表示的常量
    SqlServer中:整数:1(真)、0(假)
   Access中:True、False;On、Off;Yes、No;整数:-1(真)、0(假)。
6、字符串连接
    SqlServer中:加号(+
   Access中:和号(&
7、通配符
    SqlServer中:
    百分号(%)与零个或更多字符匹配。 
    下划线(_)与单个字符匹配。
    上插入符(^)意味着不在列表中。
    没有与英镑符(#)对应的字符。
   Access中:  星号(*)与零个或更多字符匹配。 
          问号(?)与单个字符匹配。
          叹号(!)意味着不在列表中。
          英镑符(#)意味着单个数字。
8、Drop Index
    SqlServer中:Drop Index <表名>.<索引名>
   Access中: Drop Index <索引名> ON <表名>
9.表添加标识列
   Access: alter table<表名> add列名 Counter(1,1);
SqlServeralter table<表名> add列名 bigint identity(1,1) not null;
10.系统时间及常用时间函数
SqlServer:   select getdate()
Access:    select date()+time()    SelectNow()
SqlServer 中获取日期时间函数是convert(datetime,getdate(),0) 
    而在Access中为date()+time() 或者 Now()
Access中,datediff ()dateadd ()函数表示时间类型的部分必须用单引号括起来
select datediff('n',addtime,now()) from 表名;
select dateadd('d',5,now());
而在SqlServer中,必须写成
select datediff(n,addtime,getdate()) from 表名;
select dateadd(d,5,getdate());
11. Access不支持between语句和Case+When+Else语句
12.字符串函数(截取字符串、大写、小写、查找字符串位置)
  Access:   MidUCaseLCaseInStr
        select Mid(列名,2,4) from <表名>;
       select UCase(列名) from <表名>;
        select LCase(列名) from <表名>;
        select InStr(列名, 'abc') from  <表名>;//查找字符串位置
  SqlServer: SubStringUpperLowerCharIndex
         select substring(列名,2,4) from <表名>;
       select Upper(列名) from <表名>;
        select Lower(列名) from <表名>;
        select CharIndex('abc', 列名) from <表名>;//查找字符串位置
        select CharIndex('abc', 列名,2) from  <表名>;//查找字符串位置
13、Access中的逻辑值在库中为-1和0,而SQL Server中为1和0,所以写BoolField = 1这样的语句有兼容性问题,应该改为BoolField <> 0
14、Access的varchar(文本)型最大只有255,所以如果一个文本型字段大于255时,最好定义成备注型(Access中)或text型(SQL Server中);
15ACCESS所有类型为:
    Big Integer、Binary、Boolean、Byte、Char、Currency、Date/TimeDecimalDoubleFloat、GUID、Integer、Long、Long Binary (OLEObject)、Memo、Numeric、Single、TextTimeTimeStampVarBinary
常用的几种:
Date/Time 日期/时间
Boolean 是/
Decimal 小数
Memo 备注
Text 文本
Integer 整数
如果用自动编号且主键,如下:
create tabletable1 (id autoincrement(1,1)primary key) 
create tableAAA(RID Counter,urlMemo,ActName Memo,ActDate text(150), Up_Time text(100))
连接字符串:conn = "Provider= Microsoft.Jet.OLEDB.4.0;Data Source = database.mdb";
16. 随机读取若干条记录
   SqlServer:select top 5 * from <表名> order by newid();
  Access:   select top 5 * From <表名> ORDER BYRnd(id);
17.条件取值  IIF Case+When+Else 的使用
   使用SQL语句用...代替过长的字符串显示
   SqlServer: select case
when len(列名)>10 then left(列名,10)+'...' 
else 列名
end as 别名
from  表名;
Access:  select IIF(len(列名)>2,left(列名,2)+'...', 列名) from  表名;
18. 余数
   Access:   amod b
SqlServer: a % b
19. 判断字段值为空的区别
普通空:
Access和SqlServer一样  where code is nullwhere code is not null
条件空:
Access:iif(列名 is null,0, 列名) 或iif(列名 is null, 列名2, 列名)
SqlServer: isnull(列名,0)isnull(列名, 列名2)
20.截取字符串
  Access:   select Mid(列名,2,4) from  <表名>;
SqlServer: select substring(列名,2,4) from  <表名>;
 
 
21.字段类型转换及一些函数异同
  Access:
    CDate将字符串转化成为日期 select CDate(“2011/08/11”)
CStr  括号中的内容转换为字符串,括号中的内容可以是值、变量或表达式
select CStr(155值是"155"
CInt  将     select Cint("200"&"40")  值是"20040"
Format  格式化字符串,select Format(now(),'yyyy-mm-dd')返回类似于"2011-08-11" , select Format(3/9,"0.00")返回0.33
Space产生空格 select Space(4)返回4个空格
StrComp 比较两个字符串是否内容一致(不区分大小写) select StrComp("abc","ABC")
返回0, select StrComp("abc","123")返回-1
InStr  查询子串在字符串中的位置 select Instr("abc","a")返回1, select Instr ("abc","f")返回0
Mid   取得子字符串 select Mid("123",1,2) 返回12
Choose根据第一参数,返回后面字符串组的值, select Choose(1,"a","b","c")返回a,将1改成2后,返回b,改成3后,返回c(第一个参数也可以是某个字段)
     IIF根据表达式返回特定的值 select IIF("3>1","OK","False"),返回OK
SqlServer:
 select cast('2011-08-11' as datetime)
 select convert(varchar(10),getdate(),120) --2011-08-11
 select replace(convert(varchar(10),cast('2011-08-11' as datetime),120), '-','')
(PS:也可以下载文档进行阅读:http://download.csdn.net/download/xiaorungen/9996524)