Access和sql server的语法区别
来源:互联网 发布:微信2级分销 源码下载 编辑:程序博客网 时间:2024/05/17 09:23
一、有区别的函数及解决方案
以下所示的解决方案中的函数定义在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)(Select200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_indexFROM PubSubJectAcc Where PubSubJectAcc.co_type='03')
中后面"(select200201******.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_indexFROM PubSubJectAcc Where PubSubJectAcc.co_type='03'
在SQL SERVER中都可以
2、 Inner Join语句1
StrSql:='select a.user_id,a.user_opcode,b.copy_name fromsysuser 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+''' Andcopy_name='''+Tmpcopyname +'''';
应该改为
StrSql:='select a.user_id,a.user_opcode,b.copy_name fromsysuser 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+''' Andcopy_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 fromSysCopys a inner join SysCopysUser b on a.curcopy_flag=1 anda.copy_id=b.copy_id where b.user_id=' + '''' +TmpPubUserID+ '''';
该为
StrSql:='select copy_year,copy_name,a.copy_id fromSysCopys a inner join SysCopysUser b on a.copy_id=b.copy_id wherea.curcopy_flag=''1'' and b.user_id=' + '''' +TmpPubUserID+ '''';
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行
4、 Inner Join语句3
SQl server 中可以执行以下语句
'Select distinctsysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sortFrom sysoption inner join sysroleoption ONsysoption.opti_id=sysroleoption.opti_id AND sysroleoption.role_id=:roleid'
但ACCESS中不能,只能
'Select distinctsysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sortFrom sysoption inner join sysroleoption ONsysoption.opti_id=sysroleoption.opti_id Where sysroleoption.role_id=:roleid'
5、 Update语句
Sql SerVer 中能执行但Access中不能
'Update sysuserrole SET sysuserrole.role_sort = (Selectsysrole.role_sort FROM sysrole Where sysuserrole.role_id = sysrole.role_id andsysuserrole.user_id='01')'
6、日期比较
SQL SERVER 中用
StrSql:='selectcopy_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:='selectcopy_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和sql server的语法区别
- Access和sql server的语法区别
- Access和sql server的语法区别
- Access和SQL Server的语法区别
- Access和sql server的语法区别
- Access和sql server的语法区别 (包括db2 oracle)
- Access和sql server的语法区别 (包括db2 oracle)
- Access和sql server的语法区别 (包括db2 oracle)
- access和SQL的语法区别
- access和sql语法区别
- access 和SQL SERVER数据库的区别
- Access与sql server的语法区别总结
- access sql sql server 语法的不同
- Access和sql server的语法区别 db2 oracle [darkcom 发表于 2006-7-27 8:51:21]
- SQL Server的Datediff和Access的Datediff的区别
- Access和SQL Server做底层数据库的区别
- SQL Server和Access设置自增字段的区别
- VC+ADO 连接ACCESS和SQL SERVER的区别
- Project Server 2010全局权限和类别权限定义
- Project Server 2010类别权限完整列表及说明
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
- Project Server 2010全局权限完整列表及说明
- 阿里巴巴离职DBA 35岁总结的职业生涯
- Access和sql server的语法区别
- 忆夜
- 黑马程序员_Trim()问题
- sfswin里加载timit语料库内容
- mysqli::stmt报Fatal error: Call to a member function bind_param() on a non-object in ...
- 早点
- 刚工作一段时间的人需要的思考
- 今天早上
- Java命名与目录接口——JNDI