(编辑:jimmy 日期: 2025/11/4 浏览:2)
下边列出sql server与access的语法差别,方便更换程序数据库时查询。
日期分隔符号
  access:英镑符(#)
  sql server:撇号(')
Boolean 常量
  access:True、False;On、Off;Yes、No;整数:-1(真)、0(假)。
  sql server:整数:1(真)、0(假)
字符串连接 
  access:和号(&)
  sql server:加号(+)
通配符 
  access:星号(*)与零个或更多字符匹配。  
      问号("1" cellspacing="0" cellpadding="0" width="100%" align="center">
  
    
      号
      简述
      Access语法
      SqlServer语法
      Oracle语法
      DB2语法
      解决方案
    
    
      01
      系统时间
      Date()
      GETDATE()
      SYSDATE
       
      GetSysTimeStr
    
    
      02
      连接字符串
      &
      +
      ||
      +
      GetConcatStr
    
    
      03
      截取字符串 
      SubString 
      
      SubStr 
      
      SubString
      SubString
      GetSubStr
    
    
      04
      小写字符串
      LCase
      Lower
      Lower
      Lower
      GetLowerStr
    
    
      05
      大写字符串
      UCase
      Upper 
      
      Upper 
      
      Upper 
      
      GetUpperStr
    
    
      06
      查找字符串
      InStr 
      
      InStr 
      
      CharIndex 
      
      InStr 
      
      GetFindStr
    
    
      07
      替换空值
      IIF+IsNull
      Coalesce 
      
      Nvl
      Coalesce
      GetNullStr
    
    
      08
      条件取值
      IIF
      Case+When+Else
      DeCode或Case 
      
      IIF
      
      GetCaseStr
    
    
      09
      字段类型转换
      Str、var、….
      Convert或cast 
      
      To_Char,To_Number.
      GetConvertStr 
      
      GetConvertStr
    
    
      10
      日期字符串
      
      ‘2004-10-9' 
      
      #2004-10-19# 
      
      ‘2004-10-9'
       
      GetDateStr
    
    
      11
      最大值加1 
      
       
       
       
       
      GetNextNumStr
    
    
      12
      Like语句函数
      Like ‘101*
      Like ‘101%' 
      
      Like ‘101%' 
      
       
      GetLikeStr
    
    
       
       
       
       
       
       
       
    
  
二、Access与SQLSERVER部分相同数据库函数及关键字列表
1、 函数
序号
2、 关键字
序号三、Access与语句SqlServer的语句语法区别  
1、 Inser Into …..Select …From 语句: 
在ACCESS中以下语句  
Insert INTO  
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) (Select 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index FROM PubSubJectAcc Where PubSubJectAcc.co_type='03')  
中后面"(select 200201******.co_Type='03')"中的小括号("(",")")必须去掉才能执行,如下:  
Insert INTO  
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) Select 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index FROM PubSubJectAcc Where PubSubJectAcc.co_type='03'  
在SQL SERVER 中都可以  
2、 Inner Join 语句1  
StrSql:='select a.user_id,a.user_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=c.copy_id) on a.user_id=c.user_id where  
a.user_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';  
应该改为  
StrSql:='select a.user_id,a.user_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=d.copy_id) on a.user_id=c.user_id where  
a.user_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';  
该行代码的检索条件错误:应该把C.copy_id=C.Copy_id 改为c.copy_id=d.copy_id  
注:两种写法都能在SQL-SERVER中运行,但c.copy_id=C.copy_id在ACCESS中不能运行  
3、 Inner Join 语句2  
StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.curcopy_flag=1 and a.copy_id=b.copy_id where b.user_id=' + '''' +TmpPubUserID+ '''';  
该为  
StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.copy_id=b.copy_id where a.curcopy_flag=''1'' and b.user_id=' + '''' +TmpPubUserID+ '''';  
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行  
4、 Inner Join语句3  
SQl server 中可以执行以下语句  
'Select distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_id AND sysroleoption.role_id=:roleid'  
但ACCESS中不能,只能  
'Select distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_id Where sysroleoption.role_id=:roleid'  
5、 Update语句  
Sql SerVer 中能执行但Access 中不能  
'Update sysuserrole SET sysuserrole.role_sort = (Select sysrole.role_sort FROM sysrole Where sysuserrole.role_id = sysrole.role_id and sysuserrole.user_id='01')'  
6、 日期比较  
SQL SERVER 中用  
StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date '  
+'From SysCopys '  
+'where copy_id='''+LoginCopyID+''' '  
+'and start_date<='''+datetostr(LoginDate)+''' '  
+'and end_date>='''+datetostr(LoginDate)+'''';  
ACCESS中用  
StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date '  
+'From SysCopys '  
+'where copy_id='''+LoginCopyID+''' '  
+'and start_date<=#'+datetostr(LoginDate)+'# '  
+'and end_date>=#'+datetostr(LoginDate)+'#'  
参考以上的第10个函数“GetDateStr”  
7、 最大数值获取语句  
StrSql:='insert into sysRoleOption '  
+'select '''+fidRoleId+''' as Role_ID,opti_id,'  
+'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100)+'+ MaxOptiSort  
+' as opti_Sort from sysoption where opti_parentid='''  
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID  
+''' and opti_bottom=''1'+'''';  
改为  
StrSql:='insert into sysRoleOption '  
+'select '''+fidRoleId+''' as Role_ID,opti_id,'  
+'opti_id-opti_parentid*100+'+ MaxOptiSort  
+' as opti_sort from sysoption where opti_parentid='''  
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID  
+''' and opti_bottom=''1'+''''  
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行  
但是考虑会出现Null值以及语句的通用性,可以使用以上的第07个函数“GetNullStr”和第09个函数“GetConvertStr”来完成字符串向数字,空值和0数字的转换:参考GetNextNumStr代码。