Access与sql server的语法区别总结
<p>下边列出sql server与access的语法差别,方便更换程序数据库时查询。</p>
<p>
日期分隔符号<br>
access:英镑符(#)<br>
sql server:撇号(')</p>
<p>
Boolean 常量<br>
access:True、False;On、Off;Yes、No;整数:-1(真)、0(假)。<br>
sql server:整数:1(真)、0(假)</p>
<p>
字符串连接<br>
access:和号(&)<br>
sql server:加号(+)</p>
<p>
通配符<br>
access:星号(*)与零个或更多字符匹配。 <br>
问号(?)与单个字符匹配。<br>
叹号(!)意味着不在列表中。<br>
英镑符(#)意味着单个数字。<br>
sql server:百分号(%)与零个或更多字符匹配。 <br>
下划线(_)与单个字符匹配。<br>
上插入符(^)意味着不在列表中。<br>
没有与英镑符(#)对应的字符。</p>
<p>
DROP INDEX<br>
access:Drop Index <索引名> ON <表名><br>
sql server:Drop Index <表名>.<索引名></p>
<p>
表添加标识列<br>
access:alter table <表名> add <列名> Counter(1,1)<br>
sql server:alter table <表名> add <列名> bigint identity(1,1) not null</p>
<p>
<strong>一、有区别的函数及解决方案 </strong><br><br>
以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。</p>
<table align="center" border="1" cellpadding="0" cellspacing="0" width="100%"><tbody>
<tr>
<td bgcolor="#cccccc">
<p>
号</p>
</td>
<td bgcolor="#cccccc">
<p>
简述</p>
</td>
<td bgcolor="#cccccc">
<p>
Access语法</p>
</td>
<td bgcolor="#cccccc">
<p>
SqlServer语法</p>
</td>
<td bgcolor="#cccccc">
<p>
Oracle语法</p>
</td>
<td bgcolor="#cccccc">
<p>
DB2语法</p>
</td>
<td bgcolor="#cccccc">
<p>
解决方案</p>
</td>
</tr>
<tr>
<td width="20">
<p>
01</p>
</td>
<td width="80">
<p>
<span new=""><font size="3">系统时间</font></span></p>
</td>
<td>
<p>
Date()</p>
</td>
<td>
<p>
GETDATE()</p>
</td>
<td>
<p>
SYSDATE</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
GetSysTimeStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
02</p>
</td>
<td width="80">
<p>
<span new=""><font size="3">连接字符串</font></span></p>
</td>
<td>
<p>
&</p>
</td>
<td>
<p>
+</p>
</td>
<td>
<p>
||</p>
</td>
<td>
<p>
+</p>
</td>
<td>
<p>
GetConcatStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
03</p>
</td>
<td width="80">
<p>
<span new=""><font size="3">截取字符串 </font></span></p>
</td>
<td>
<p>
SubString</p>
</td>
<td>
<p>
SubStr</p>
</td>
<td>
<p>
SubString</p>
</td>
<td>
<p>
SubString</p>
</td>
<td>
<p>
GetSubStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
04</p>
</td>
<td width="80">
<p>
小写字符串</p>
</td>
<td>
<p>
LCase</p>
</td>
<td>
<p>
Lower</p>
</td>
<td>
<p>
Lower</p>
</td>
<td>
<p>
Lower</p>
</td>
<td>
<p>
GetLowerStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
05</p>
</td>
<td width="80">
<p>
大写字符串</p>
</td>
<td>
<p>
UCase</p>
</td>
<td>
<p>
Upper</p>
</td>
<td>
<p>
Upper</p>
</td>
<td>
<p>
Upper</p>
</td>
<td>
<p>
GetUpperStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
06</p>
</td>
<td width="80">
<p>
查找字符串</p>
</td>
<td>
<p>
InStr</p>
</td>
<td>
<p>
InStr</p>
</td>
<td>
<p>
CharIndex</p>
</td>
<td>
<p>
InStr</p>
</td>
<td>
<p>
GetFindStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
07</p>
</td>
<td width="80">
<p>
替换空值</p>
</td>
<td>
<p>
IIF+IsNull</p>
</td>
<td>
<p>
Coalesce</p>
</td>
<td>
<p>
Nvl</p>
</td>
<td>
<p>
Coalesce</p>
</td>
<td>
<p>
GetNullStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
08</p>
</td>
<td width="80">
<p>
条件取值</p>
</td>
<td>
<p>
IIF</p>
</td>
<td>
<p>
Case+When+Else</p>
</td>
<td>
<p>
DeCode或Case</p>
</td>
<td>
<p>
IIF</p>
</td>
<td>
<p>
GetCaseStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
09</p>
</td>
<td width="80">
<p>
字段类型转换</p>
</td>
<td>
<p>
Str、var、….</p>
</td>
<td>
<p>
Convert或cast</p>
</td>
<td>
<p>
To_Char,To_Number.</p>
</td>
<td>
<p>
GetConvertStr</p>
</td>
<td>
<p>
GetConvertStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
10</p>
</td>
<td width="80">
<p>
日期字符串</p>
</td>
<td>
<p>
‘2004-10-9'</p>
</td>
<td>
<p>
#2004-10-19#</p>
</td>
<td>
<p>
‘2004-10-9'</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
GetDateStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
11</p>
</td>
<td width="80">
<p>
最大值加1</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
GetNextNumStr</p>
</td>
</tr>
<tr>
<td height="2" width="20">
<p>
12</p>
</td>
<td height="2">
<p>
Like语句函数</p>
</td>
<td height="2">
<p>
Like ‘101*</p>
</td>
<td height="2">
<p>
Like ‘101%'</p>
</td>
<td height="2">
<p>
Like ‘101%'</p>
</td>
<td height="2">
<p>
</p>
</td>
<td height="2">
<p>
GetLikeStr</p>
</td>
</tr>
<tr>
<td width="20">
<p>
</p>
</td>
<td width="80">
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
<td>
<p>
</p>
</td>
</tr>
</tbody></table>
<p>
<b>二、Access与SQLSERVER部分相同数据库函数及关键字列表 </b></p>
<p>
1、 函数</p>
<table border="1" cellpadding="0" cellspacing="0" width="70%"><tbody>
<tr>
<td width="33%">
<p>
序号</p>
</td>
<td width="33%">
<p>
简述</p>
</td>
<td width="34%">
<p>
</p>
</td>
</tr>
<tr>
<td width="33%">
<p>
01</p>
</td>
<td width="33%">
<p>
记数函数</p>
</td>
<td width="34%">
<p>
Count</p>
</td>
</tr>
<tr>
<td height="17" width="33%">
<p>
02</p>
</td>
<td height="17" width="33%">
<p>
最大值</p>
</td>
<td height="17" width="34%">
<p>
Max</p>
</td>
</tr>
<tr>
<td width="33%">
<p>
</p>
</td>
<td width="33%">
<p>
</p>
</td>
<td width="34%">
<p>
</p>
</td>
</tr>
</tbody></table>
<p>
</p>
<p>
2、 关键字</p>
<table border="1" cellpadding="0" cellspacing="0" width="70%"><tbody>
<tr>
<td height="20" width="33%">
<p>
序号</p>
</td>
<td height="20" width="33%">
<p>
简述</p>
</td>
<td height="20" width="34%">
<p>
</p>
</td>
</tr>
<tr>
<td width="33%">
<p>
01</p>
</td>
<td width="33%">
<p>
</p>
</td>
<td width="34%">
<p>
Like</p>
</td>
</tr>
<tr>
<td height="17" width="33%">
<p>
02</p>
</td>
<td height="17" width="33%">
<p>
连接</p>
</td>
<td height="17" width="34%">
<p>
Join</p>
</td>
</tr>
<tr>
<td width="33%">
<p>
03</p>
</td>
<td width="33%">
<p>
判断空</p>
</td>
<td width="34%">
<p>
Is Null</p>
</td>
</tr>
<tr>
<td width="33%">
<p>
</p>
</td>
<td width="33%">
<p>
</p>
</td>
<td width="34%">
<p>
</p>
</td>
</tr>
</tbody></table>
<p>
三、Access与语句SqlServer的语句语法区别 <br>
1、 Inser Into …..Select …From 语句:<br>
在ACCESS中以下语句 <br>
Insert INTO <br>
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') <br>
中后面"(select 200201******.co_Type='03')"中的小括号("(",")")必须去掉才能执行,如下: <br>
Insert INTO <br>
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' <br>
在SQL SERVER 中都可以 <br>
2、 Inner Join 语句1 <br><br>
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 <br>
a.user_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +''''; <br>
应该改为 <br>
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 <br>
a.user_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +''''; <br>
该行代码的检索条件错误:应该把C.copy_id=C.Copy_id 改为c.copy_id=d.copy_id <br>
注:两种写法都能在SQL-SERVER中运行,但c.copy_id=C.copy_id在ACCESS中不能运行 <br>
3、 Inner Join 语句2 <br>
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+ ''''; <br>
该为 <br>
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+ ''''; <br>
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行 <br>
4、 Inner Join语句3 <br><br>
SQl server 中可以执行以下语句 <br>
'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' <br>
但ACCESS中不能,只能 <br>
'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' <br>
5、 Update语句 <br><br>
Sql SerVer 中能执行但Access 中不能 <br>
'Update sysuserrole SET sysuserrole.role_sort = (Select sysrole.role_sort FROM sysrole Where sysuserrole.role_id = sysrole.role_id and sysuserrole.user_id='01')' <br>
6、 日期比较 <br><br>
SQL SERVER 中用 <br>
StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date ' <br>
+'From SysCopys ' <br>
+'where copy_id='''+LoginCopyID+''' ' <br>
+'and start_date<='''+datetostr(LoginDate)+''' ' <br>
+'and end_date>='''+datetostr(LoginDate)+''''; <br>
ACCESS中用 <br>
StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date ' <br>
+'From SysCopys ' <br>
+'where copy_id='''+LoginCopyID+''' ' <br>
+'and start_date<=#'+datetostr(LoginDate)+'# ' <br>
+'and end_date>=#'+datetostr(LoginDate)+'#' <br>
参考以上的第10个函数“GetDateStr” <br>
7、 最大数值获取语句 <br>
StrSql:='insert into sysRoleOption ' <br>
+'select '''+fidRoleId+''' as Role_ID,opti_id,' <br>
+'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100)+'+ MaxOptiSort <br>
+' as opti_Sort from sysoption where opti_parentid=''' <br>
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID <br>
+''' and opti_bottom=''1'+''''; <br>
改为 <br>
StrSql:='insert into sysRoleOption ' <br>
+'select '''+fidRoleId+''' as Role_ID,opti_id,' <br>
+'opti_id-opti_parentid*100+'+ MaxOptiSort <br>
+' as opti_sort from sysoption where opti_parentid=''' <br>
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID <br>
+''' and opti_bottom=''1'+'''' <br>
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行 <br>
但是考虑会出现Null值以及语句的通用性,可以使用以上的第07个函数“GetNullStr”和第09个函数“GetConvertStr”来完成字符串向数字,空值和0数字的转换:参考GetNextNumStr代码。</p>
頁:
[1]