张新朝 發表於 2023-11-15 00:00:00

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:和号(&amp;)<br>
          sql server:加号(+)</p>
<p>
        通配符<br>
          access:星号(*)与零个或更多字符匹配。 <br>
              问号(?)与单个字符匹配。<br>
              叹号(!)意味着不在列表中。<br>
              英镑符(#)意味着单个数字。<br>
          sql server:百分号(%)与零个或更多字符匹配。 <br>
              下划线(_)与单个字符匹配。<br>
              上插入符(^)意味着不在列表中。<br>
              没有与英镑符(#)对应的字符。</p>
<p>
        DROP INDEX<br>
          access:Drop Index &lt;索引名&gt; ON &lt;表名&gt;<br>
          sql server:Drop Index &lt;表名&gt;.&lt;索引名&gt;</p>
<p>
        表添加标识列<br>
          access:alter table &lt;表名&gt; add &lt;列名&gt; Counter(1,1)<br>
          sql server:alter table &lt;表名&gt; add &lt;列名&gt; 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>
                                        &amp;</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&lt;='''+datetostr(LoginDate)+''' ' <br>
        +'and end_date&gt;='''+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&lt;=#'+datetostr(LoginDate)+'# ' <br>
        +'and end_date&gt;=#'+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]
查看完整版本: Access与sql server的语法区别总结