access mysql 语法_Access和sql server的语法区别

这篇博客详细对比了Access、SQL Server、Oracle和DB2数据库在函数和语句语法上的差异,包括系统时间获取、连接字符串、字符串操作、字段类型转换等方面,并列举了具体示例。文章还特别指出了在Access与SQL Server中某些特定语句的执行区别,如Insert Into、Inner Join等。
摘要由CSDN通过智能技术生成

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

以下所示的解决方案中的函数定义在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')'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值