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>

 

Access和sql server的语法区别

Access和sql server的语法区别 ...
  • AJAXBloger
  • AJAXBloger
  • 2007年10月09日 21:20
  • 847

Access和sql server的语法区别 db2 oracle [darkcom 发表于 2006-7-27 8:51:21]

...
  • huo789
  • huo789
  • 2007年02月26日 17:22
  • 1633

Access与SQL Server 语法差异

序号 简述 Access语法 SqlServer语法 Oracle语法 解决方案 01 系统时间 Now(),D...
  • 3150379
  • 3150379
  • 2017年02月03日 10:53
  • 1249

sql server 与 oracle语法对比

from: http://blog.csdn.net/bobwu/article/details/5487712 找到一篇好文章,转载给大家 ORACLE与SQL SERVER语法区别   一、数据...
  • jgmydsai
  • jgmydsai
  • 2014年03月12日 11:27
  • 1416

Access和sql server的语法区别

Access和sql server的语法区别一、有区别的函数及解决方案   以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。 序号 简述  Access语法 ...
  • guijun520
  • guijun520
  • 2011年03月27日 20:04
  • 236

Access和sql server的语法区别 (包括db2 oracle)

Access和sql server的语法区别 (包括db2 oracle) 收藏 Access和sql server的语法区别 一、有区别的函数及解决方案 以下所示的解决方案中的函数定义在untDat...
  • rise51
  • rise51
  • 2011年03月18日 00:28
  • 370

何谓SQL Server数据库?与Access数据库有什么区别

接触了Access数据库之后,我们开始了SQL Server数据库的学习。在学习的过程中,我们不免会问:何谓SQL Server数据库?它与Access数据库有什么区别呢?           Ac...
  • huanjileaimeidan
  • huanjileaimeidan
  • 2012年08月07日 20:33
  • 3334

ORACLE与SQL SERVER语法区别 2

ORACLE与SQL SERVER语法区别   一、数据类型 ORACLE与SQL SERVER在数据类型的对比如下:   SQL SERVER ORACL...
  • okey88
  • okey88
  • 2012年07月11日 16:39
  • 3166

Access 与 SQl server 一些写法上的区别 记录

1. 查询Where条件带布尔类型值(条件语句):    Access(版本2003)           and   IsA = true ;   (不含引号)    Sql server   ...
  • oFengJu
  • oFengJu
  • 2018年01月18日 22:22
  • 75

Sql Server 2012 语法与my Sql的区别

String sql = "INSERT INTO [User] (username,password)  values  ('下名','122')"; 插入语法和my Sql 是有一定区别的 区别...
  • wei_chong_chong
  • wei_chong_chong
  • 2016年08月19日 20:16
  • 567
收藏助手
不良信息举报
您举报文章:Access和sql server的语法区别
举报原因:
原因补充:

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