微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Access与sql server语法的区别是什么

今天就跟大家聊聊有关Access与sql server语法的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

日期分隔符号
  access:英镑符(#)
  sql server:撇号(')

Boolean 常量
  access:True、False;On、Off;Yes、No;整数:-1(真)、0(假)。
  sql server:整数:1(真)、0(假)

字符串连接
  access:和号(&)
  sql server:加号(+)

通配
  access:星号(*)与零个或更多字符匹配。 
      问号(?)与单个字符匹配。
      叹号(!)意味着不在列表中。
      英镑符(#)意味着单个数字。
  sql server:百分号(%)与零个或更多字符匹配。 
      下划线(_)与单个字符匹配。
      上插入符(^)意味着不在列表中。
      没有与英镑符(#)对应的字符。

DROP INDEX
  access:Drop Index <索引名> ON <表名>
  sql server:Drop Index <表名>.<索引名>

添加标识列
  access:alter table <表名> add <列名> Counter(1,1)
  sql server:alter table <表名> add <列名> bigint identity(1,1) not null

一、有区别的函数解决方案 

以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。

简述 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、 函数

序号
 
简述  
01 记数函数
 
Count
02 最大值 Max
     

2、 关键字

序号
 
简述  
01
 
Like
02 连接 Join
03 判断空 Is Null
     

三、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代码

看完上述内容,你们对Access与sql server语法的区别是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程之家行业资讯频道,感谢大家的支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐