SQLServer和Oracle常用函数对比
SQLServer和Oracle常用函数对比数学函数1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 as int) valueO:select trunc(-1.002) value from dual5.四舍五入S:select round(1.23456,4) value 1.23460O:select round(1.23456,4) value from dual 1.23466.e为底的幂S:select Exp(1) value 2.7182818284590451O:select Exp(1) value from dual 2.718281827.取e为底的对数S:select log(2.7182818284590451) value 1O:select ln(2.7182818284590451) value from dual; 18.取10为底对数S:select log10(10) value 1O:select log(10,10) value from dual; 19.取平方S:select SQUARE(4) value 16O:select power(4,2) value from dual 1610.取平方根S:select SQRT(4) value 2O:select SQRT(4) value from dual 211.求任意数为底的幂S:select power(3,4) value 81O:select power(3,4) value from dual 8112.取随机数S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;13.取符号S:select sign(-8) value -1O:select sign(-8) value from dual -114.圆周率S:SELECT PI() value 3.1415926535897931O:不知道15.sin,cos,tan 参数都以弧度为单位例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道)DEGREES:弧度-〉角度RADIANS:角度-〉弧度数值间比较18. 求集合最大值S:select max(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值S:select min(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl21.求字符序号S:select ascii('a') valueO:select ascii('a') value from dual22.从序号求字符S:select char(97) valueO:select chr(97) value from dual23.连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22') 33 value from dual23.子串位置 --返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual23.模糊子串的位置 --返回2,参数去掉中间%则返回7S:select patindex('%d%q%','sdsfasdqe') value O:oracle没发现,但是instr可以通过第四个参数控制出现次数select INSTR('sdsfasdqe','sd',1,2) value from dual 返回624.求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual25.子串代替返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换S:没发现O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度S:len,datalengthO:length28.大小写转换 lower,upper29.单词首字母大写S:没发现O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual32.删除空格S:ltrim,rtrimO:ltrim,rtrim,trim33. 重复字符串S:select REPLICATE('abcd',2) valueO:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高日期函数35.系统时间S:select getdate() valueO:select sysdate value from dual36.前后几日直接与整数相加减37.求日期S:select convert(char(10),getdate(),20) value O:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分S:DATEPART 和 DATENAME 函数(第一个参数决定)O:to_char函数第二个参数决定参数---------------------------------下表需要补充year yy, yyyyquarter qq, q (季度)month mm, m (m O无效)dayofyear dy, y (O表星期)day dd, d (d O无效)week wk, ww (wk O无效)weekday dw (O不清楚)Hour hh,hh12,hh24 (hh12,hh24 S无效)minute mi, n (n O无效)second ss, s (s O无效)millisecond ms (O无效)----------------------------------------------40.当月最后一天S:不知道O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间S:可以直接转或者select cast('2004-09-08'as datetime) valueO:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROMDUAL;43.求两日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+12.3) valueO:直接用两个日期相减(比如d1-d2=12.3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间S:不知道O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------AST ADT 大西洋标准时间BST BDT 白令海标准时间CST CDT 中部标准时间EST EDT 东部标准时间GMT 格林尼治标准时间HST HDT 阿拉斯加?夏威夷标准时间MST MDT 山区标准时间NST 纽芬兰标准时间PST PDT 太平洋标准时间YST YDT YUKON标准时间常用sql语句1.当前日期是星期几(中文显示)select to_char(to_date('2008-01-02 00:00:00’,'yyyy-mm-ddhh24:mi:ss'),'day') from dual2.取得当前日期是本月的第几周select to_char(sysdate,’W’) from dual3.取得当前日期是一个星期中的第几天,注意星期天是第一天Select to_char(sysdate,’D’) from dual –星期Select to_char(sydate,’yyyy’) from dual –年Select to_char(sydate,’Q’) from dual –季Select to_char(sydate,’mm’) from dual –月Select to_char(sydate,’dd’) from dual –日4.本月一日的日期,本日的日期Select trunc(sysdate,’mm’) from dualSelect trunc(sysdate,’dd’) from dual5.下月一日的日期Select trunc(add_months(sysdate,1),’mm’) from dual6.返回当月的最后一天Select last_day(trunc(sysdate)) from dual7.得到一年的每一天Select trunc(sysdate,’yyyy’)+rn-1 date0 from (select rownum rn from all_objects where rownum<366)8.今天是今年的第N天Select to_char(sysdate,’DDD’) from dual9.判断某一天所在年份是否为闰年Selectdecode(to_char(last_day(trunc(sysdate,’y’)+31),’dd’),’29’,’闰年’,’平年’) from dual。
浅析oracle与sqlserver的区别
Select语句的不同oracle Select * from tablename where rownum < 2sqlserver Select top 1 * from tablenameoracle Select A.*, B.* from A, B where A.bh=B.bh(+)sqlserver Select A.*, B.* from A left Join B on A.bh=B.bhoracle Select A.*, B.* from A, B where A.bh(+)=B.bhsqlserver Select A.*, B.* from A right join B where A.bh=B.bh //oracle 9i 以后也支持了oracle Select * from tablename where lrsj>= to_date(‘2002-11-11’,’yyyy-mm-dd’)sqlserver Select * from tablename where lrsj >= ‘2002-11-11’oracle Select sysdate from dualsqlserver Select getdate()oracle Select Field1 || Field2 from A (指字符串的)sqlserver Select Field1+Field2 from AInsert语句的不同Oracle如何实现自增列(1)建立测试数据表。
CREATE TABLE TEST(ID NUMBER,NAME V ARCHAR2(20),PRIMARY KEY(ID));(2) 创建序列。
CREATE SEQUENCE SEQ_TEST;Parameter的区别存储过程的不同(3)创建触发器。
CREATE OR REPLACE TRIGGER AUTOINCREMENT BEFORE INSERT ON TESTFOR EACH ROWWHEN (NEW.ID IS NULL)BEGINSELECT SEQ_TEST.NEXTV AL INTO :NEW.ID FROM DUAL; END;(4)插入数据。
Oracleinstr函数与SqlServercharindex的区别
Oracleinstr函数与SqlServercharindex的区别
INSTR(C1,C2[,I[,J]])
【功能】在⼀个字符串中搜索指定的字符,返回发现指定的字符的位置;
【说明】多字节符(汉字、全⾓符等),按1个字符计算
【参数】C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 第J次出现的位置,默认为1
【返回】数值
【⽰例】
select instr('abcdefgc','c',1,2) from dual;
返回:8
CHARINDEX(C1,C2[,I])
【功能】在⼀个字符串中搜索指定的字符,返回发现指定的字符的位置;
【说明】多字节符(汉字、全⾓符等),按1个字符计算
【参数】C1希望搜索的字符串
C2被搜索的字符串
I 搜索的开始位置,默认为1
【返回值】数值
【实例】
select charindex('c','abcdefgc',4)
返回:8
【总结】需要注意的地⽅是虽然INSTR和CHARINDEX函数实现的功能相同,但C1,C2表⽰的意思完全相反,⽽且INSTR的功能更强⼤,可以查找第J次出现的位置。
SQL SERVER和ORACLE的通用函数
AF_StrToNum
AF_StrToNum(AChar)
参考:
5
将字符串转换成数值型。
参数:AChar 要转换的字符串; 返回类型:数值型
参考: T-SQL:Space PL/SQL:RPAD
AF_CHARINDEX 返回字符串中指定表达式的起 始位置
AF_Charindex(AExp1,AExp2,AStart)
参考:
参数: AExp1 要寻找的短字符串表达式; T-SQL:CharIndex
AExp2 用于搜索指定 AExp1 的字符串; PL/SQL:Instrb
参考:
参数: Adatepart 规定为‘DAY’、‘MONTH’, T-SQL:DATEDAdd
‘YEAR’;ADATE 是基础日期;AInt 是用来 PL/SQL : TRUNC 、
增加 Adatepart 的值,分别是天数、月份 ADD_MONTHS
数,年份数,可以是负数。
返回类型:日期型
3
2. 3 数 学类 函数
转换不成功时则默认值为 0 返回类型:int
参考: T-SQL:Convert PL/SQL:To_number
AF_StrToCurr 将字符串转换成货币型。
AF_StrToCurr(AChar) 参数:AChar 要转换的字符串
转换不成功时则默认值 0.0000 返回类型:有精度的数值型
参考: T-SQL:Convert PL/SQL:To_number
AF_Len(AStr)
返回给定字符串表达式的字符 参数:要计算的字符串表达式。
1
备注
参考: T-SQL:ASCII PL/SQL:ASCII 参考: T-SQL:Char PL/SQL:Chr
SQLserver、Oracle、Mysql语法与用法对比(over)
alter table表名
add constraint唯一约束名unique (列名)
完全一样
altertable表名addunique(列名)
添加默认约束
alter table表名
add constraint default (值) for列名
完全一样
添加检查约束
alter table表名
add constraint check (列名> 10)
完全一样
添加外键约束
alter table子表
add constraiห้องสมุดไป่ตู้t外键约束名foreign key
(子表的列名) references主表(列名)
on update cascade / on update action
注意:
默认和加on update action表示更新受限
alter table表名Add列名数据库类型
删除表中一列
alter table表名drop column列名
alter table表名drop column列名
修改表现有列
alter table表名alter column列名
新数据库类型大小
alter table表明modify(列名数据类型)
删除约束
加on update cascade表示更新不受限,多项
操作时用逗号隔开
完全一样
添加索引约束
altertable表名addindex索引名(列名)
添加普通索引:
create index索引名ON表名(列名)
添加唯一索引:
create unique索引名ON表名(列名)
删除索引
Oracle与SQLServer的SQL语法差异总结
项目
Oracle 10g
SQLServer 2008
备注
存储过程格式
CREATEORREPLACEPROCEDURE存储过程名(参数列表) IS
Begin
---存储过程内容
End存储过程名;
CREATEPROCEDURE存储过程名(参数列表) AS
--存储过程内容
From person
2、流控制语句
流控制与表达式结构很相似,只是结果表达式换成语句块
Case表达式when匹配表达式then {语句块1} else {语句块2} end case;
Eg:
case v_name
when‘张三’then
v_number := 1;
when‘李四’then
v_number:=2;
Eg:
Set @result =‘abcd’
2、通过SQL语句赋值
Select变量=表达式from表
Eg:
Select @code=code,@name=name from sysc01 where id = 1000
语句结束符
SQL语句使用分号;作为语句的结束
SQL语句不需要加分号;作为结束符(加也可)
3、动态存储过程(带入、出参)
Eg:
DECLARE@resultVARCHAR(50);
DECLARE@sqlNVARCHAR(1000);
DECLARE@paraNVARCHAR(200);
SET@sql='p_test @code,@name,@result output'
SET@para='@code varchar(10),@name varchar(10),@result varchar(50) output'
【最新精选】SqlServerOracle数据类型,函数,导入导出对照
Sql 与Oracle 数据类型对照SqlServer数据类型SqlServer长度Oracle数据类型bigint8 NUMBER(19)binary50 RAW(50)bit1 Char(1)char10 CHAR(10) datetime8 DATEdecimal9 NUMBER(18)float8 BINARY_DOUBLEimage16 BLOBint Integermoney8 NUMBER(19,4)nchar10 NCHAR(10)ntext16 NCLOBnumeric9 NUMBER(18)nvarchar50 NVARCHAR2(50) real4 BINARY_FLOAT smalldatetime4 DATEsmallint2 NUMBER(5)smallmoney4 NUMBER(10,4)sql_variant BLOBtext16 CLOBtimestamp8 RAW(8)tinyint1 NUMBER(3) uniqueidentifier16 BLOBvarbinary50 RAW(50)varchar50 VARCHAR2(50)Sql 与Oracle 函数对照Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:函数Oracle Microsoft SQL Server把字符转换为ASCII ASCII ASCII字串连接CONCA T (expression + expression)把ASCII转换为字符CHR CHAR返回字符串中的开始字符(左起)INSTR CHARINDEX 把字符转换为小写LOWER LOWER把字符转换为大写UPPER UPPER填充字符串的左边LPAD N/A清除开始的空白LTRIM LTRIM清除尾部的空白RTRIM RTRIM字符串中的起始模式(pattern)INSTR PA TINDEX多次重复字符串RPAD REPLICA TE字符串的语音表示SOUNDEX SOUNDEX重复空格的字串RPAD SPACE从数字数据转换为字符数据TO_CHAR STR子串SUBSTR SUBSTRING替换字符REPLACE STUFF将字串中的每个词首字母大写INITCAP N/A翻译字符串TRANSLA TE N/A字符串长度LENGTH DA TELENGTH or LEN列表中最大的字符串GREA TEST N/A列表中最小的字符串LEAST N/A如果为NULL则转换字串NVL ISNULL日期函数函数Oracle Microsoft SQL Server日期相加(date column +/- value) orADD_MONTHS DA TEADD两个日期的差(date column +/- value) orMONTHS_BETWEEN DA TEDIFF当前日期和时间SYSDA TE GETDA TE()一个月的最后一天LAST_DAY N/A时区转换NEW_TIME N/A日期后的第一个周日NEXT_DAY N/A代表日期的字符串TO_CHAR DA TENAME代表日期的整数TO_NUMBER(TO_CHAR)) DA TEPART日期舍入ROUND CONVERT日期截断TRUNC CONVERT字符串转换为日期TO_DA TE CONVERT如果为NULL则转换日期NVL ISNULL转换函数函数Oracle Microsoft SQL Server数字转换为字符TO_CHAR CONVERT字符转换为数字TO_NUMBER CONVERT日期转换为字符TO_CHAR CONVERT字符转换为日期TO_DA TE CONVERT16进制转换为2进制HEX_TO_RA W CONVERT2进制转换为16进制RA W_TO_HEX CONVERT其它行级别的函数函数Oracle Microsoft SQL Server返回第一个非空表达式DECODE COALESCE当前序列值CURRV AL N/A下一个序列值NEXTV AL N/A如果exp1 = exp2, 返回null DECODE NULLIF用户登录账号ID数字UID SUSER_ID用户登录名USER SUSER_NAME用户数据库ID数字UID USER_ID用户数据库名USER USER_NAME当前用户CURRENT_USER CURRENT_USER用户环境(audit trail) USERENV N/A在CONNECT BY子句中的级别LEVEL N/A其他获取系统当前时间select sysdate from dual;获取第一条数据(sqlserver中的top 1)number=1操作符前后不能有空格数据类型转换to_number()to_Char()conertt(int as 列名)拼接字符串CONCA T(Field1,Field2)Field1||Field2往表格内添加字段alter table [Table_Name] add([Field_Name] varchar(10));大小写相互转换select upper('3dff571c-e831-4fc9-a8c9-b0227feaa9cf') from dual; --小转大select lower('3DFF571C-E831-4FC9-A8C9-B0227FEAA9CF') from dual; --大转小截取字符串SELECT substr('123456789', 6, 6) FROM dual;substr(字符串,截取开始位置(正数:从左往右数/负数:从右往左数),截取长度(指定位置向右的字符串))数据库导入导出导出EXPEXP 用户名/用户密码@数据库file=数据导出后的文件位置.dmp full=Y(注:导出数据库中所有用户,表空间,表,数据)EXP 用户名/用户密码@数据库file=数据导出后的文件位置.dmp(注:导出当前登录用户的所有表空间,表,数据)EXP 用户名/用户密码@数据库file=数据导出后的文件位置.dmp tables(table1,table2)(注:导出当前登录用户,指定表)导入IMPIMP 用户名/用户密码@数据库file=要导入的数据文件位置.dmpignore=y(表示先删除表,再创建)(注:导入数据文件中所有数据)【附加总结类文档一篇,不需要的朋友可以下载后编辑删除,谢谢】中学生感恩节主题教育活动总结5篇中学感恩节活动总结范文1一、活动目的如今虽然很多人注意到生活礼仪,谢谢常挂在嘴边,但是大家或许是因为羞于表达或许出于缺少机会而省略了对于身边亲人、朋友和老师的感谢。
SqlServer和Oracle,db2的区别
SqlServer和Oracle,db2的区别1.开放性:SQL Server 只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。
Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。
而且windows平台的可靠性,安全性和伸缩性是非常有限的。
它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.Oracle 能在所有主流平台上运行(包括 windows)。
完全支持所有的工业标准。
采用完全开放策略。
可以使客户选择最适合的解决方案。
对开发商全力支持。
DB2 能在所有主流平台上运行(包括windows)。
最适于海量数据。
DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.2.可伸缩性,并行性SQL server DB2 并行实施和共存模型并不成熟。
很难处理日益增多的用户数和数据卷。
伸缩性有限。
Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。
如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
DB2 DB2具有很好的并行性。
DB2把数据库管理扩充到了并行的、多节点的环境. 数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。
数据库分区有时被称为节点或数据库节点3.安全性SQL server 没有获得任何安全证书。
Oracle Server 获得最高认证级别的ISO标准认证。
DB2 获得最高认证级别的ISO标准认证。
4.性能SQL Server 多用户时性能不佳Oracle 性能最高,保持windowsNT下的TPC-D和TPC-C的世界记录。
DB2 适用于数据仓库和在线事物处理性能较高。
5.客户端支持及应用模式SQL Server C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接DB2 跨平台,多层结构,支持ODBC,JDBC等客户6.操作简便SQL Server 操作简单,但只有图形界面.Oracle 较复杂, 同时提供GUI和命令行,在windowsNT和unix 下操作相同DB2 操作简单,同时提供GUI和命令行,在windowsNT和unix 下操作相同7.使用风险SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。
sqlserver与oracle差异汇总
SQL server 与Oracle开发比较本文档主要从oracle与sql server语法上进行差异性比较,诸如两者在管理,性能,优化等方面的差异不作比较。
●概念上区别1.Oracle 是一种对象关系数据库管理系统(ORDBMS),而Sql server 只是关系型数据库管理系统(RDBMS).2.Oracle使用Internet文件系统,该系统基于Java的应用程序,可以使数据库基于成为Internet的开发平台;Sql server 是基于windows3.两者支持的命令类别差不多,数据定义语言,数据操纵语言,事务处理控制语言,数据控制语言.在Oracle中,在事务控制语言中除了commit,rollback等还多了一个Savepoint,设置保存点。
4.oracle sql的扩展叫PL/SQL,主要的结构化查询工具有sql*plus,isql*plus, pl/sql等,Ms sql的扩展叫Transact-SQL,主要的结构化查询工具就是自带的查询分析器5.主要数据类型Orace:主要支持char ,varchar2,long,number,datetime,raw,longraw,clob,blob,bfie前面三个是Character数据类型,varchar2支持可变长度的字符串,long支持可变长度的字符数据,raw,long raw用于存储二进制数据,long raw 可变长度最后三个是大对象(lob)数据类型,存储非结构化的信息,例如声音剪辑,视频文件CLOG表示Character Lob,可以存储大量的字符数据,它对于存储非结构化的XML 文档非常有用。
BLOG表示Binary LOG,此数据类型可以存储大型二进制对象,如图形、视频剪辑,声音文件等支不支持,money,货币Sql server 主要支持的文本类型char ,varchar,nchar,nvarchar,text,ntext,image,货币类型Money,二进制 binary,varbinary等等●开发语法A.SQL 语法两者的SQL语法基本上是相同的,只是一些细节方面的问题一、表的管理:修改表的结构,如增加,删除列,创建表修改表1.修改表的列的数据类型,大小的定义不同,如下面修改数据类型。
Oracle和SQLServer的语法区别
Oracle和SQLServer的语法区别SQL 语言支持这一部分概述了 Transact-SQL 和 PL/SQL 语言语法之间的相同点和不同点,并给出转换策略。
要将 Oracle DML 语句和 PL/SQL 程序迁移到 SQL Server 时,请按下列步骤执行:1.验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。
进行任何必要的修改。
2.把所有外部联接改为 SQL-92 标准外部联接语法。
3.用相应 SQL Server 函数替代 Oracle 函数。
4.检查所有的比较运算符。
5.用“+”字符串串联运算符代替“||”字符串串联运算符。
6.用 Transact-SQL 程序代替 PL/SQL 程序。
7.把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。
8.用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。
9.把 PL/SQL 触发器转换为 Transact-SQL 触发器。
10.使用 SET SHOWPLAN 语句,优化查询性能。
SELECT 语句Oracle 和 Microsoft SQL Server 使用的 SELECT 语句语法类似。
SQL Server 不支持 Oracle 特定的基于开销的优化程序提示,它必须被删除。
建议使用的技术是,使用 SQL Server 基于开销的优化程序。
有关详细信息,请参见本章后面的“SQL 语句优化”。
SQL Server 不支持 Oracle 的 START WITHUCONNECT BY 子句。
在 SQL Server 中,可以创建完成相同任务的存储过程替代它。
SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合运算符。
可使用 SQL Server EXISTS 和 NOT EXISTS 子句,实现相同的结果。
Oracle和SQL_Server的语法区别
SQL 语言支持这一部分概述了 Transact-SQL 和 PL/SQL 语言语法之间的相同点和不同点,并给出转换策略。
要将 Oracle DML 语句和 PL/SQL 程序迁移到 SQL Server 时,请按下列步骤执行:1.验证所有 SELECT、INSERT、UPDATE 和 DELETE 语句的语法是有效的。
进行任何必要的修改。
2.把所有外部联接改为 SQL-92 标准外部联接语法。
3.用相应 SQL Server 函数替代 Oracle 函数。
4.检查所有的比较运算符。
5.用“+”字符串串联运算符代替“||”字符串串联运算符。
6.用 Transact-SQL 程序代替 PL/SQL 程序。
7.把所有 PL/SQL 游标改为非游标 SELECT 语句或 Transact-SQL 游标。
8.用 Transact-SQL 过程代替 PL/SQL 过程、函数和包。
9.把 PL/SQL 触发器转换为 Transact-SQL 触发器。
10.使用 SET SHOWPLAN 语句,优化查询性能。
SELECT 语句Oracle 和 Microsoft SQL Server 使用的 SELECT 语句语法类似。
SQL Server 不支持 Oracle 特定的基于开销的优化程序提示,它必须被删除。
建议使用的技术是,使用 SQL Server 基于开销的优化程序。
有关详细信息,请参见本章后面的“SQL 语句优化”。
SQL Server 不支持 Oracle 的 START WITHUCONNECT BY 子句。
在 SQL Server 中,可以创建完成相同任务的存储过程替代它。
SQL Server 不支持 Oracle 的 INTERSECT 和 MINUS 集合运算符。
可使用 SQL Server EXISTS 和 NOT EXISTS 子句,实现相同的结果。
在下面示例中,使用 INTERSECT 运算符,用于查找学生登记的所有课程的代码和名称。
