当前位置: 首页 > 图文教程 > 数据库 > 数据库技巧 > Access与sql server的语法区别总结

数据库技巧
数据库删除完全重复和部分关键字段重复的记录
SQL服务器面临的危险和补救.读[十种方法]后感.
SQLite不支持Right Join的解决办法GROUP BY
mssql注入躲避IDS的方法
本地SQL注射攻略分析曝光
数据库 左连接 右连接 全连接用法小结
以前架征途时的合区的SQL语句代码备份
sql语句中where 1=1的作用
dba_indexes视图的性能分析
推荐Sql server一些常见性能问题的解决方法
带参数的sql和不带参数的sql存储过程区别
SQL语句详细说明[部分]
PostgreSQL8.3.3安装方法
三表左连接查询的sql语句写法
MSSQL自动同步设置方法
mssql数据同步实现数据复制的步骤
SQL嵌套查询总结
sql2005可实时监测数据库版本控制SQL的触发器
sql 中将日期中分秒化为零的语句
SQL 注入式攻击的本质

数据库技巧 中的 Access与sql server的语法区别总结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 55 ::
收藏到网摘: n/a

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