Access和sql server的语法区别

原创 2007年10月09日 21:20:00
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代码。

1、Sql中不能省略as
2、一次只能执行一条Sql
3、没有substring、cast等函数
4、sql中严格区分整形和字符型
5、没有存储过程、触发器
6、!= 替换为<>
7、时间字符串两边加#号
8、带参数的sql语句中 @用?号替换 <script type="text/javascript"><!--google_ad_client = "pub-2801850660129274";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel ="";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_text = "000000";google_color_url = "008000";//--></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=undefined&amp;dt=1191934517187&amp;lmt=1191934517&amp;format=undefinedxundefined&amp;output=html&amp;correlator=1191934517187&amp;url=http%3A%2F%2Fbokee.shinylife.net%2Fblog%2Farticle.asp%3Fid%3D557&amp;ref=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fcomplete%3D1%26hl%3Dzh-CN%26inlang%3Dzh-CN%26newwindow%3D1%26q%3Ddb2%2Biif%26btnG%3DGoogle%2B%25E6%2590%259C%25E7%25B4%25A2%26meta%3Dlr%253Dlang_zh-CN%26aq%3Dt%26oq%3Dnull&amp;cc=100&amp;ga_vid=1100622778.1191934388&amp;ga_sid=1191934388&amp;ga_hid=160178139&amp;ga_fc=true&amp;flash=9&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=2&amp;u_java=true" frameborder="0" scrolling="no" allowtransparency="allowtransparency"></iframe>

 

SQL Server、Access、Oracle数据库之优缺点对比

导读: 1、SQL Server是一个关系数据库管理系统。 2、ACCESS是由微软发布的关联式数据库管理系统。 3、Oracle是基于服务器的大型数据库。...
  • dtjiawenwang88
  • dtjiawenwang88
  • 2017年07月03日 22:31
  • 541

MySQL和Sql Server的sql语句区别

项目需要做sql server适配,因此需要将所有写的mysql的sql语句转变成sqlserver里面的sql语句。在做适配的过程中,总结出了以下几点关于MySQL和SQLServer的sql语句的...
  • u010121883
  • u010121883
  • 2015年12月24日 21:28
  • 4561

SQL Server数据导入到Access数据库

 将Access数据库数据导入到SQL Server 2005 第一步,开启SQLSERVER 2000服务管理,打开“企业管理器”,新建一个数据库,名称为“Access数据转换”; ...
  • liyanping521
  • liyanping521
  • 2014年12月19日 14:05
  • 1988

Access与sql server的语法区别总结

下边列出sql server与access的语法差别,方便更换程序数据库时查询。 日期分隔符号   access:英镑符(#)   sql server:撇号(') Boolean 常...
  • wzk456
  • wzk456
  • 2015年10月07日 23:10
  • 213

sql server 连接带密码的access

sql server 导入带密码的access数据 如何实现将Access的数据的导入到SQL Server呢,相信网络上有很多教程来帮助大家了。但是,大家发现如果access文档使用了密码加...
  • xcntime
  • xcntime
  • 2014年03月16日 01:23
  • 1374

将ACCESS数据库数据转到SQL server数据库中(通用)

把ACCESS数据库转换成SQL server数据库,ACCESSH和SQL server都有很多不同的版本,但是转换也都大同小易,和这里我给大家说说最常见的怎么将ACCESS转化成SQL serve...
  • yecats
  • yecats
  • 2015年09月27日 15:36
  • 1053

将ACCESS数据库迁移到SQLSERVER数据库方法(图文详解)

本人在做专业课设计时需要将自己动手把ACCESS数据库中数据转换到SQL Server数据库中。经过百般挫折也算是完成了,经过这般痛苦感觉,还是记录下来比较好,否则都对不起自己浪费的那好几个小时。废话...
  • aiming66
  • aiming66
  • 2016年12月31日 16:04
  • 5572

轻松教你SQL转ACCESS

SQL数据库转access数据库步骤: 1.      建立access数据库:在access中建立access数据库和表,access字段类型与sql中字段类型的对应关系。 2.        ...
  • fengyuzhengfan
  • fengyuzhengfan
  • 2014年04月13日 00:59
  • 2280

SQL2008链接Access数据库(.mdb)实现方法

SQL2008链接Access数据库(.mdb)实现方法在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现与Access数据库的互联。第一步、依次打开:控制面板\所有控制面板项...
  • taosport
  • taosport
  • 2016年06月17日 11:59
  • 1315

EXCEL:批量读取EXCEL文件给指定数据库(access,sql server)

读取文本文件到Excel并对数据列进行格式化 .style1 { border: medium double #E7E7E7; ...
  • kqkszx
  • kqkszx
  • 2014年04月27日 09:26
  • 1091
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Access和sql server的语法区别
举报原因:
原因补充:

(最多只允许输入30个字)