access与sql查询语句转换注意事项
更新时间:2023-08-28 13:00:01 阅读量: 教育文库 文档下载
access与sql查询语句转换注意事项
1、--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay 01:02:03
select * from employee
2、--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time 23:08:00
select * from employee
3、UPDATE语句对比:
SQLSERVER中更新多表的UPDATE语句:
UPDATE Tab1 SET http://www.77cn.com.cn = http://www.77cn.com.cn
FROM Tab1 a,Tab2 b
WHERE a.ID = b.ID;
同样功能的SQL语句在ACCESS中应该是
UPDATE Tab1 a,Tab2 b SET http://www.77cn.com.cn = http://www.77cn.com.cn
WHERE a.ID = b.ID;
即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后.
上例中如果Tab2可以不是一个表,而是一个查询,例:
UPDATE Tab1 a,(Select ID,Name From Tab2) b
SET http://www.77cn.com.cn = http://www.77cn.com.cn
WHERE a.ID = b.ID;
4、访问多个不同的ACCESS数据库-在SQL中使用In子句:
Select a.*,b.* From Tab1 a,Tab2 b In @#db2.mdb@# Where a.ID=b.ID;
上面的SQL语句查询出当前数据库中Tab1和db2.mdb(当前文件夹中)中Tab2以ID为关联的所有记录.
缺点-外部数据库不能带密码.
5、在ACCESS中访问其它ODBC数据源
下例在ACCESS中查询SQLSERVER中的数据
SELECT * FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL
Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;] 外部数据源连接属性的完整参数是:
[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;]
其中的DRIVER=driver可以在注册表中的
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\
access与sql查询语句转换注意事项
中找到
6、ACCESS支持子查询
ACCESS支持外连接,但不包括完整外部联接,如支持
LEFT JOIN 或 RIGHT JOIN
但不支持
FULL OUTER JOIN 或 FULL JOIN
7、ACCESS中的日期查询
注意:ACCESS中的日期时间分隔符是#而不是引号
Select * From Tab1 Where [Date]>#2002-1-1#;
在DELPHI中我这样用
SQL.Add(Format(
@#Select * From Tab1 Where [Date]>#%s#;@#,
[DateToStr(Date)]));
8、ACCESS中的字符串可以用双引号分隔,但SQLSERVER不认,所以为了迁移方便和兼容,建议用单引号作为字符串分隔符.
9、Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃
10、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 00201,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'
access与sql查询语句转换注意事项
在SQL SERVER 中都可以
11、Inner Join 语句1
StrSql:='select http://www.77cn.com.cner_id,http://www.77cn.com.cner_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=c.copy_id) on http://www.77cn.com.cner_id=http://www.77cn.com.cner_id
Where http://www.77cn.com.cner_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';
应该改为
StrSql:='select http://www.77cn.com.cner_id,http://www.77cn.com.cner_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=d.copy_id) on http://www.77cn.com.cner_id=http://www.77cn.com.cner_id
where http://www.77cn.com.cner_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中不能运行
12、 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 http://www.77cn.com.cner_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 http://www.77cn.com.cner_id=' + '''' +TmpPubUserID+ '''';
注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行
access与sql查询语句转换注意事项
13、 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'
查询第X页,每页Y条记录
最基本的处理方法(原理):
如果表中有主键(记录不重复的字段也可以),可以用类似下面的方法,当然y,(x-1)*y要换成具体的数字,不能用变量:
select top y * from 表 where 主键 not in(select top (x-1)*y 主键 from 表)
正点,就是这句话,立刻用上。
打印一下sql语句:SELECT TOP 20 * FROM tb_news WHERE nid NOT IN(SELECT TOP 0 nid FROM tb_news)
再打印结果数组, 返回结果为空,晕死。要是mysql就可以用phpmyadmin测试一下,但现在是access,找什么测试呀,算了,还是到群里问问,问了白问,不是不理我,就是说语句有问题。真是大哥来的,语句怎么会有问题的呢!!!汗一个
无耐之下,继续GG,无意之下,居然给我发现这么一个信息:
关于定义access分页的问题
如果为第一页
a=0
第二页 a=10
但是为何a=0不能辨认出来。而sqlserver可以。大家有其他方式来实现吗? 啊,原来真凶在这里,当第一页的时候,是不能出现结果的,我之前也测试过:当我选择不是第一页的时候 SELECT TOP 20 * FROM tb_news WHERE nid NOT IN(SELECT TOP 20 nid FROM tb_news)可以有结果返回的,那现在怎么办呢?
access与sql查询语句转换注意事项
答案就是:我作一个判断,当第一页的时候,不用公式来套,第二页以后才用公式来进行查询,结果也证明是对的。附上代码:
$url = ad_news.php? ;
$page = intval($page) ? intval($page): 1;
$rsofpage = 3;//设置每页显示的记录数
$sql = “SELECT count(*) as total FROM {$_pre}news”;
$rs = $db->GetRow( $sql );
$total_rs = $rs['total'];
$total_page = ceil($total_rs/$rsofpage);
$offset = ($page-1) * $rsofpage;
if($page==1) $sql = “SELECT TOP $rsofpage * FROM {$_pre}news ORDER BY nid DESC”;
else $sql = “SELECT TOP $rsofpage * FROM {$_pre}news WHERE nid NOT IN(SELECT TOP $offset nid FROM {$_pre}news ORDER BY nid DESC) ORDER BY nid DESC”;
$rs = $db->GetAll( $sql );
$arr = array();
for($i=0;$i<count($rs);$i++)
{
$rs[$i]['created'] = formatdate($rs[$i]['created'] , 4);
$rs[$i]['description'] = msubstr(htmlchars_decode($rs[$i]['description']) , 0 , 200); $arr[] = $rs[$i];
}
$pages = numofpage($total_rs,$page,$total_page,$url);
大家echo $pages就可看到结果啦!
附上一个分页函数(verycms的作者所有,哈哈):
function numofpage($count,$page,$numofpage,$url,$max=0){ $total=$numofpage;
$max && $numofpage > $max && $numofpage=$max;
if($numofpage <= 1 || !is_numeric($page)){
return ”;
}else{
$pages=”<div class=\”pages\”><a href=\”{$url}page=1\” style=\”font-weight:bold\”>«</a>”;
$flag=0;
for($i=$page-3;$i<=$page-1;$i++){
if($i<1) continue;
$pages.=”<a href=\”{$url}page=$i\”>$i</a>”;
}
$pages.=”<b> $page </b>”;
if($page<$numofpage){
access与sql查询语句转换注意事项
for($i=$page+1;$i<=$numofpage;$i++){
$pages.=”<a href=\”{$url}page=$i\”>$i</a>”;
$flag++;
if($flag==4) break;
}
}
$pages.=”<a href=\”{$url}page=$numofpage\” style=\”font-weight:bold\”>»</a> <input type=\”text\” size=\”3\” onkeydown=\”javascript:
if(event.keyCode==13){ location= {$url}page= +this.value;return false;}\”> Pages: ( $page/$total total ) Records: $count</div>”; return $pages;
}
}
access与sql查询语句转换注意事项
delete语句
access中删除时用:delete * from table1 where a>2 即只要把select 语句里的select 换成delete就可以了。
sqlserve 中则为: delete from table1 where a>2 即没有*号
as 后面的计算字段区别
access中可以这样:select a,sum(num) as kc_num,kc_num*num as all_kc_num 即可以把AS后的字段当作一个数据库字段参与计算。
sqlserver 中则为:select a,sum(num) as kc_num,sum(num)*num as all_kc_num 即不可以把AS后的字段当作一个数据库字段参与计算。
正在阅读:
access与sql查询语句转换注意事项08-28
基于Java的网上书城的设计与实现05-05
in the eighties 与 in ones eightiesdoc07-09
司法考试三大本口诀大全05-06
平遥古城作文500字06-21
北京服装学院2016年艺术类专业招生简章 - 图文12-29
驾驶员理论考试易错题05-19
员工职业精神及企业文化考核管理办法01-20
丑小鸭好段摘抄赏析11-20
临检室岗位职责06-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 语句
- 注意事项
- 转换
- access
- 查询
- sql
- word电子小报交通安全小常识
- 【新理念大学英语学习大厅5.0版】第一册答案
- 拼音前鼻音,后鼻音区分与练习
- 太白县实习报告 宝鸡文理学院
- 2019版高考地理二轮复习 专题1-1-2《大气运动》限时规范训练
- 2011-2012学年度北京石景山区初三数学上册期末试题及答案
- 2016年郑州大学435保险专业基础之微观经济学考研冲刺模拟题及答案
- 注水井网与注水方式
- 几种常用坐标系间的坐标转换
- 第08章 高速计数与高速脉冲
- 电机星三角启动
- 西师版小学四年级平行四边形Microsoft PowerPoint 演示文稿
- 2017-2022年中国越野轮胎行业市场监测与投资前景预测报告(目录)
- 第九章多柔体系统动力学分析方法概要
- 项目开发流程
- 密室逃脱1攻略 密室逃脱1全18关图文攻略
- DLT 543-1994 电厂用水处理设备质量验收标准
- 第3章_晶闸管可控整流电路(2三相)
- 麦肯锡《公司战略规划草案》95页
- 箱盖文献综述