今天就跟大家聊聊有关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()SYSDATEGetSysTimeStr02连接字符串&+||+GetConcatStr03截取字符串 SubString
SubStr
SubStringSubStringGetSubStr04小写字符串LCaseLowerLowerLowerGetLowerStr05大写字符串UCaseUpper
Upper
Upper
GetUpperStr06查找字符串InStr
InStr
CharIndex
InStr
GetFindStr07替换空值IIF+IsNullCoalesce
NvlCoalesceGetNullStr08条件取值IIFCase+When+ElseDeCode或Case
IIF
GetCaseStr09字段类型转换Str、var、….Convert或cast
To_Char,To_Number.GetConvertStr
GetConvertStr10日期字符串
‘2004-10-9'
#2004-10-19#
‘2004-10-9'GetDateStr11最大值加1
GetNextNumStr12Like语句函数Like ‘101*Like ‘101%'
Like ‘101%'
GetLikeStr

二、Access与SQLSERVER部分相同数据库函数及关键字列表

1、 函数

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

2、 关键字

序号
简述01
Like02连接Join03判断空Is Null

三、Access与语句SqlServer的语句语法区别
1、InserInto…..Select…From语句:
在ACCESS中以下语句
InsertINTO
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index)(Select200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_indexFROMPubSubJectAccWherePubSubJectAcc.co_type='03')
中后面"(select200201******.co_Type='03')"中的小括号("(",")")必须去掉才能执行,如下:
InsertINTO
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index)Select200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_indexFROMPubSubJectAccWherePubSubJectAcc.co_type='03'
在SQLSERVER中都可以
2、InnerJoin语句1

StrSql:='selecta.user_id,a.user_opcode,b.copy_namefromsysuserainnerjoin(syscopysusercinnerjoinsyscopysbonc.copy_id=c.copy_id)ona.user_id=c.user_idwhere
a.user_opcode='''+EdtUserOpCode.text+'''Andcopy_name='''+Tmpcopyname+'''';
应该改为
StrSql:='selecta.user_id,a.user_opcode,b.copy_namefromsysuserainnerjoin(syscopysusercinnerjoinsyscopysbonc.copy_id=d.copy_id)ona.user_id=c.user_idwhere
a.user_opcode='''+EdtUserOpCode.text+'''Andcopy_name='''+Tmpcopyname+'''';
该行代码的检索条件错误:应该把C.copy_id=C.Copy_id改为c.copy_id=d.copy_id
注:两种写法都能在SQL-SERVER中运行,但c.copy_id=C.copy_id在ACCESS中不能运行
3、InnerJoin语句2
StrSql:='selectcopy_year,copy_name,a.copy_idfromSysCopysainnerjoinSysCopysUserbona.curcopy_flag=1anda.copy_id=b.copy_idwhereb.user_id='+''''+TmpPubUserID+'''';
该为
StrSql:='selectcopy_year,copy_name,a.copy_idfromSysCopysainnerjoinSysCopysUserbona.copy_id=b.copy_idwherea.curcopy_flag=''1''andb.user_id='+''''+TmpPubUserID+'''';
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行
4、InnerJoin语句3

SQlserver中可以执行以下语句
'Selectdistinctsysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sortFromsysoptioninnerjoinsysroleoptionONsysoption.opti_id=sysroleoption.opti_idANDsysroleoption.role_id=:roleid'
但ACCESS中不能,只能
'Selectdistinctsysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sortFromsysoptioninnerjoinsysroleoptionONsysoption.opti_id=sysroleoption.opti_idWheresysroleoption.role_id=:roleid'
5、Update语句

SqlSerVer中能执行但Access中不能
'UpdatesysuserroleSETsysuserrole.role_sort=(Selectsysrole.role_sortFROMsysroleWheresysuserrole.role_id=sysrole.role_idandsysuserrole.user_id='01')'
6、日期比较

SQLSERVER中用
StrSql:='selectcopy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date'
+'FromSysCopys'
+'wherecopy_id='''+LoginCopyID+''''
+'andstart_date<='''+datetostr(LoginDate)+''''
+'andend_date>='''+datetostr(LoginDate)+'''';
ACCESS中用
StrSql:='selectcopy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date'
+'FromSysCopys'
+'wherecopy_id='''+LoginCopyID+''''
+'andstart_date<=#'+datetostr(LoginDate)+'#'
+'andend_date>=#'+datetostr(LoginDate)+'#'
参考以上的第10个函数“GetDateStr”
7、最大数值获取语句
StrSql:='insertintosysRoleOption'
+'select'''+fidRoleId+'''asRole_ID,opti_id,'
+'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100)+'+MaxOptiSort
+'asopti_Sortfromsysoptionwhereopti_parentid='''
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID
+'''andopti_bottom=''1'+'''';
改为
StrSql:='insertintosysRoleOption'
+'select'''+fidRoleId+'''asRole_ID,opti_id,'
+'opti_id-opti_parentid*100+'+MaxOptiSort
+'asopti_sortfromsysoptionwhereopti_parentid='''
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID
+'''andopti_bottom=''1'+''''
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行
但是考虑会出现Null值以及语句的通用性,可以使用以上的第07个函数“GetNullStr”和第09个函数“GetConvertStr”来完成字符串向数字,空值和0数字的转换:参考GetNextNumStr代码。

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