SQL与Access的区别和联系



         access是中小型数据库,sql是大型的,当存储容量达到一定程度的时候,就会明显的感觉到他们的区别,主要是在存取速度上!
         access可以单独的上传下载,操作它,本机不需要安装access,而,sql的话,跟mysql相似,你必须在本机安装sql才能在本机上操作数据库,当然也可以通过连接操作网络上的sql数据库,操作他们必须用项对应的驱动

        Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。

        SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制
       

      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=1and 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 wherea.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_idAND 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_idWhere 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中不能运行

         access是中小型数据库,sql是大型的,当存储容量达到一定程度的时候,就会明显的感觉到他们的区别,主要是在存取速度上!
         access可以单独的上传下载,操作它,本机不需要安装access,而,sql的话,跟mysql相似,你必须在本机安装sql才能在本机上操作数据库,当然也可以通过连接操作网络上的sql数据库,操作他们必须用项对应的驱动

        Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。

        SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制
       

      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=1and 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 wherea.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_idAND 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_idWhere 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中不能运行

猜你喜欢

转载自blog.csdn.net/qq_39564498/article/details/77867650