香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > 数据库 >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

Access与sql server的语法区别总结


时间:2020-11-19 14:17 作者:admin610456


下边列出sql server与access的语法差别,方便更换程序数据库时查询。

日期分隔符号
  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、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代码。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)