以下存属个人意见,有问题请在下面提出:(*表示须考证,Oracle用8.1.6)
1.选定前20条记录
ORACLE:select * from tablename where rownum<20;
SQL SERVER:select top 20 * from tablename;
2.连接别的数据库
ORACLE:
Create Database Link DB_LINK_OHAHU Connect On User Name Identified By Password Using 'Connection String'; //创建数据连接
'Connection String'可以用NET8 EASY CONFIG或者直接用TNSNAMES.ORA里定义的服务名称
Select * from TableName@DB_LINK_OHAHU; //使用DB_LINK_OHAHU上的表TableName;
SQL SERVER: insert into
OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'e:/db/aa.mdb';'admin';'', t1)
select * from t1;
ACCESS:SELECT * Into [;database=e:/db/aa.mdb;PWD=密码].t1 FROM t1;
3.关于Select Into;
ORACLE:
nCnt integer
select count(fieldname) into nCnt from tablename;//把Count(*)存放到变量nCnt;
SQL SERVER:
Select * into TableName2 From TableName1;//把TableName1的数据存到TableName2,包括数据库结构
4.日期字段的问题
ORACLE :Select * from TableName Where FieldName > To_date('1981-02-23', 'YYYY-mm-dd');
上面只是说Oracle只能用'作为分割符,实际上对于日期型字段,Oracle的显示很奇特比如1981-8-20,select出来的格式是'20-8月 -81'所以查找的时候还是要>'20-8月 -81'才能用。另外好像DateDiff在Oracle中也不支持
Access:
Select * from TableName Where FieldName>'1981-2-23';
Select * from TableName Where FieldName>#1981-2-23#;
都可以,高级一点参考DateDiff的用法
5.字段自增
ORACLE 要用到生成序列,触发器:
CREATE SEQUENCE SEQname
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
/
CREATE TRIGGER TRGname
BEFORE INSERT ON table_name
REFERENCING
NEW AS :NEW
FOR EACH ROW
Begin
SELECT SEQname.NEXTVAL
INTO :NEW.FIELDname
FROM DUAL;
End;
/
ACCESS:Create Table TableName(LID AutoIncrement(1,1),......
SQL SERVER:Create Table TableName ( LID Int Identity(1,1),..........
Identity(种子,增长速度) ,AutoIncrement(种子,增长速度)
6.默认登陆方法
ORACLE:用控制台程序SQLPLUS或者DBA。连接外服务须在tnsnames.ora上添加服务。SQLPLUS使用方法:命令行下面输入>sqlplus 用户名/密码[@服务名]
用户名: 密码:
SYSTEM MANAGER //可以管理大部分的工作:表空间、用户、授权、数据文件等
sys change_on_install //比system的权限更高,经常用来设置系统的参数,或者特殊系统视图
internal oracle //经常用在通过svrmgrl来启动关闭数据库,因为缺省是os认证,所以不需要密码
SQL SERVER:用企业管理器或者查询分析器
用户名:sa 密码:sa //可用系统认证方式登陆
7.用ADO操作的问题*
ORACLE:当数据集为空的时候不能m_pRs->MoveFirst();
ACCESS,SQL SERVER:可以
8.关于Order By语句
select * from (select a,b from tablename order by a) tmp;
这样的句子在Oracle不会有问题,可是SQL SERVER中却会提示错误。
错误原因是Order By 作为子句的时候必须用Top关键字,解决的方法:
select * from (select top 100 percent a,b from tablename order by a) tmp;
top 100 percent表示选出百分百的纪录
另外还有需要注意的地方,无论是Oracle还是Sql Server。
使用Group By关键字的时候Order By的字段名称和Select的字段名称,都必须能在Select的字段名称找到,比如下面有两个错误:
select a from tablename group by b order by c
下面网页可提供参考:
数据库总结(一)---各种数据库使用差别
http://community.youkuaiyun.com/Expert/topic/3108/3108440.xml?temp=.6947443
Oracle 和 mysql 的一些简单命令对比参照
http://202.101.18.235/club/bbs/showEssence.asp?id=22161&page=2