Access和sql server的语法区别

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

    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代码。

相关文章
利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误在SQL Server中取出第m条到第n条记录的方法再推荐一个开源的嵌入式数据库Firebird推荐:嵌入式数据库sqliteMySQL优化全攻略-相关数据库命令优化MySQL数据库性能的几个好方法用批处理定时自动备份数据库的应用随机读取数据库数据的代码(ACCESS)SQL语句大全sql数据库不能直接用instr函数精妙Sql语句SQl语句中的update用法远程MSSql数据库连接教程TSYS SQL1.1 版的全面修改及调试记录SQL注入时用到的方法三步堵死SQL注入漏洞SQL SERVER的数据类型为TSYS SQL版增加"内部链接"XP PROFESSIONAL 下安装SQL
    标签:数据库ACCESSserver 发布于:2006-06-15 04:06:10

当前共有0条评论,我也要发表:

    我的名字:

    我的邮箱: