Access与sql server的语法区别总结
下边列出sql server与aess的语法差别,方便更换程序数据库时查询。
日期分隔符号
aess英镑符(#)
sql server撇号(')
Boolean 常量
aessTrue、False;On、Off;Yes、No;整数-1(真)、0(假)。
sql server整数1(真)、0(假)
字符串连接
aess和号(&)
sql server加号(+)
通配符
aess星号()与零个或更多字符匹配。
问号(?)与单个字符匹配。
叹号(!)意味着不在列表中。
英镑符(#)意味着单个数字。
sql server百分号(%)与零个或更多字符匹配。
下划线(_)与单个字符匹配。
上插入符(^)意味着不在列表中。
没有与英镑符(#)对应的字符。
DROP INDEX
aessDrop Index <索引名> ON <表名>
sql serverDrop Index <表名>.<索引名>
表添加标识列
aessalter table <表名> add <列名> Counter(1,1)
sql serveralter table <表名> add <列名> bigint identity(1,1) not null
一、有区别的函数及解决方案
以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。
号 | 简述 | Aess语法 | 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 | |
二、Aess与SQLSERVER部分相同函数及关键字列表
1、 函数
序号 |
简述 | |
01 | 记数函数 |
Count |
02 | 最大值 | Max |
2、 关键字
序号 |
简述 | |
01 | Like | |
02 | 连接 | Join |
03 | 判断空 | Is Null |
三、Aess与语句SqlServer的语句语法区别
1、 Inser Into …..Select …From 语句
在ACCESS中以下语句
Insert INTO
PubSubJectACopys(Copy_id,A_id,A_Pid,A_name,a_short,A_Comment,A_Pro,a_type,Sub_id_flag,a_index) (Select 200201,A_id,A_Pid,A_name,a_short,A_Comment,A_Pro,a_type,Sub_id_flag,a_index FROM PubSubJectA Where PubSubJectA.co_type='03')
中后面"(select 200201.co_Type='03')"中的小括号("(",")")必须去掉才能执行,如下
Insert INTO
PubSubJectACopys(Copy_id,A_id,A_Pid,A_name,a_short,A_Comment,A_Pro,a_type,Sub_id_flag,a_index) Select 200201,A_id,A_Pid,A_name,a_short,A_Comment,A_Pro,a_type,Sub_id_flag,a_index FROM PubSubJectA Where PubSubJectA.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 中能执行但Aess 中不能
'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_parentid100+'+ 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代码。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程