• 技术文章 >专题 >Access

    access与sql server的语法对比

    王林王林2021-02-20 13:39:33转载2435

    本文为大家简单整理了access与sql server的语法区别,希望对大家有所帮助。

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

    以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。

    6cb6ff6191e27e32688dc53064a9508.png

    二、Access与SQLSERVER部分相同数据库函数及关键字列表

    1、 函数

    9ec18fff89103311393a0963a357c3c.png

    2、 关键字

    4032170aeb1e47543f55ed9b6f3294f.png

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

    1、Sql中不能省略as
    2、一次只能执行一条Sql
    3、没有substring、cast等函数
    4、sql中严格区分整形和字符型
    5、没有存储过程、触发器
    6、!= 替换为<>
    7、时间字符串两边加#号
    8、带参数的sql语句中 @用?号替换

    相关推荐:access数据库教程

    以上就是access与sql server的语法对比的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:博客园,如有侵犯,请联系admin@php.cn删除
    专题推荐:access sql server 语法
    上一篇:microsoft office access是什么意思 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • MySQL与MongoDB之SQL语法对比_MySQL• 深入浅出MongoDB(五)mongo语法和mysql语法对比学习• 集算报表与润乾报表的函数语法对比
    1/1

    PHP中文网