数据库 
首页 > 数据库 > 浏览文章

Access与sql server的语法区别总结

(编辑:jimmy 日期: 2024/12/31 浏览:3 次 )

下边列出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、 函数

序号
简述   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代码。

上一篇:收藏的SQLServer技巧集
下一篇:数据库设计的折衷方法
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?