Access与sql server的语法区别总结_数据库其它

下边列出sql server与access的语法差别,方便更换程序数据库时查询。

日期分隔符号
  access:英镑符(#)
  sql server:撇号(')

Boolean 常量
  access:True、False;On、Off;Yes、No;整数:-1(真)、0(假)。
  sql server:整数:1(真)、0(假)

字符串连接
  access:和号(&)
  sql server:加号(+)

通配符
  access:星号(*)与零个或更多字符匹配。 
      问号(?)与单个字符匹配。
      叹号(!)意味着不在列表中。
      英镑符(#)意味着单个数字。
  sql server:百分号(%)与零个或更多字符匹配。 
      下划线(_)与单个字符匹配。
      上插入符(^)意味着不在列表中。
      没有与英镑符(#)对应的字符。

DROP INDEX
  access:Drop Index <索引名> ON <表名>
  sql server:Drop Index <表名>.<索引名>

表添加标识列
  access:alter table <表名> add <列名> Counter(1,1)
  sql server:alter table <表名> add <列名> bigint identity(1,1) not null

一、有区别的函数及解决方案 

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

时间: 2024-08-03 21:29:00

Access与sql server的语法区别总结_数据库其它的相关文章

Access转换成SQL Server需要注意事项整理_数据库其它

一,首先,我说的是在ACCESS2000,SQL2000之间转换,其他的我也还没有尝试过,希望大家多多试验,肯定是有办法的:  二,转换的方法  1,打开"控制面板"下"管理工具"中的"数据库源":  2,按"添加"添加一个新的数据源,在选择栏里选"Driver do microsoft Access  (*.mdb)",完成后将出现一个框,  在"数据库源"里面输入你想写的名称,我取名

SQL SERVER的字段类型说明_数据库其它

SQL SERVER提供的说明.  bit:0或1的整型数字  int:从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字  smallint:从-2^15(-32,768)到2^15(32,767)的整型数字  tinyint:从0到255的整型数字  decimal:从-10^38到10^38-1的定精度与有效位数的数字  numeric:decimal的同义词  money:从-2^63(-922,337,203,685,477.5808)到2^

iwms access与sql版的安装与转换_数据库其它

iwms4.5版后第一次运行时自动sql建表.下边为转换access版数据到sql数据库方法. 注意:从access转换为sql要求两个版本的版本号相同 如果你的数据库账号不是系统账号请用记事本打开dvnews.sql替换里边的[dbo]为[你的sql账号] 最后需要修改Web.config中的sql数据库连接 sql连接字符串中不可以出现"&","<",">"如果一定要用请分别用"&","

SQL server 2005的表分区_数据库其它

下面来说下,在SQL SERVER 2005的表分区里,如何对已经存在的有数据的表进行分区,其实道理和之前在http://www.cnblogs.com/jackyrong/archive/2006/11/13/559354.html说到一样,只不过交换下顺序而已,下面依然用例子说明:   依然在c盘的data2目录下建立4个文件夹,用来做4个文件组,然后建立数据库 use masterIF  EXISTS (SELECT name FROM sys.databases WHERE name =

直接获取Access、SQL Server等数据库数据

access|server|数据|数据库 直接获取access.SQL Server等数据库数据Author: MixPST,Ph4nt0m Security Teamhttp://www.ph4nt0m.org 当使用SQL注入access的时候,经常会遇到密码为中文.猜不到关键字段名这样的问题.使用本技术就能够很快速的解决这样的问题.本技术最低要求有两条: 1.使用access数据库的系统存在SQL注入漏洞:mssql数据库也支持这个技术2.需要知道欲爆数据所在的表的表名以及这个表下的一个字

怎么快速获取access、SQL Server数据

  1.使用access数据库的系统存在SQL注入漏洞;mssql数据库也支持这个技术 2.需要知道欲爆数据所在的表的表名以及这个表下的一个字段名,一般都是id字段 使用本技术显而易见的优势在于: 1.可以不需要引号,过滤引号对本技术没有影响 2.可以快速的知道敏感数据的内容,而不必像以往一样慢慢的猜解,中文.特殊字符等等都通杀 3.在SQL Server屏蔽了错误信息之后仍然可以快速得到敏感数据内容 4.可以在不知道关键(欲知数据的)字段名的情况下仍然能够获取到欲知数据 咋一看可能这个技术很难

从Pocket Access向SQL Server CE进行数据库迁移

摘要:本文讨论有关将用 eMbedded Visual Basic 编写的 Pocket PC 应用程序迁移到 .NET Compact Framework 的问题.迁移包括从使用 ADO CE 访问 Pocket Access 数据库中的数据更改为使用 ADO.NET 访问 SQL Server CE 中的数据.本文提供了 Visual Basic 和 C# 两种版本的示例代码. 请从 Microsoft 下载中心下载 Download Database Migration from CEDB

access数据库-access连接sql server同步更新问题

问题描述 access连接sql server同步更新问题 电脑A数据采集用的是access每天更新一张新表,连接服务器B的sql server同步更新也是一天一张新表,利用什么方式可以解决? 解决方案 用C#写个windows服务程序或winform客户端,定时获取sql server,写入access. 解决方案二: SQL Server和Access中的条件判断语法(case when和iff)连接到数据庫(ACCESSSQL SERVER)两台SQL Server服务器同步问题.

Access和SQL Server里面的SQL语句的不同之处_数据库其它

我的感觉是,Accees数据库虽然可以称得上是小型的关系型数据库,并且也是使用的结构化查询语言SQL,但它的语法(主要体现在函数上),却类似vbscript的语法,我想,这应该和Access属于Office系列有关,基于它的开发和应用,自然就与VBA扯上关系,因而Access的函数库也就是VBA的函数库,而非SQL函数库.下面,我们来具体看下Access和SQL Server在查询语句的编写上具体的不同. 一.数据类型转换: Access: SELECT '调查'+CStr(Did) as di