返回顶部

SQL Server与OracleSQL语法差异

以下差异将以SQL Server视角阐述

  1. 在创建函数或存储过程时,定义参数名前需要使用@符号

 

 

 

 

 

 

  1. 可以用ALTER PROCEDURE/FUNCTION来对已经存在的存储过程和函数的内容进行修改,Oracle的ALTER只可以用于重编译或debug。
  2. 要进行Top-N查询时,应该使用SELECT TOP N [column_name]
  3. 进行Top-N查询时,以Top 10为例,如果第1112条数据与第10条相同,也想将其进行输出时,应使用SELECT TOP N WITH TIES语句
  4. 如果要查询前10%的数据,可以使用SELECT TOP N PERCENT
  5. 用户变量名使用@前缀进行定义,而Oracle中是使用:来作为前缀

 

 

 

 

 

 

  1. SQL Server中没有dual虚表的概念,如果需要进行某函数结果的测试,直接SELECT即可。
  2. Oracle捕获异常通常分为预定义和自定义异常,使用exception和when-then来进行捕获和异常信息抛出,而SQL Server中使用try-catch。

 

 

 

 

 

 

  1. 两个数据库函数大部分相同,小部分不同的按照具体情况百度
  2. SQL Server中的数据库类似于schema,要使用哪个数据库,就使用use xx语句,如果要显示多个查询结果,则每个语句后跟go
  3. 做聚合分析时,SQL Server中的是grouping,Oracle中是grouping set
  4. 如果需要同时显示查询结果和小计,但是由于字段数量不同,无法用union显示,此时可以使用compute(Oracle中没有)

 

 

 

  1. Oracle中的with xx as后跟查询语句,而SQL Server中的CTE应该写成with xx (输出字段) as后跟查询语句
  2. SQL Server中使用游标遍历获取数据时,应使用fetch next,而Oracle中的是fetch,而且SQL Server的游标可以前后滚动;关闭游标时Oracle只需要写Close cursor就会关闭并释放资源,而SQL Server还需要DEALLOCATE CURSOR来释放资源。
  3. SQL Server中遵循隐式事务提交,如果不在SSMS中修改implicit_transaction参数为off,那么每个语句将视为一个事务,在参数为on的情况下,如果需要将语句块视为事务,必须使用begin transaction..commit transaction来构造语句块。
  4. 存储过程/函数中,需要给参数赋默认值应使用等号,Oracle中是:=
  5. SQL Server和Oracle的数据类型略有不同,具体百度
  6. SQL Server自增字段使用identity定义,而Oracle需要使用序列实现
  7. SQL Server中使用SELECT INTO语句根据源表来创建新表,而Oracle中使用的是CTAS
  8. Oracle使用两个管道符号(||)来作为字串连接操作符,SQL Server则使用加号(+)

 

来自于同事整理和网上整理

posted @ 2020-10-19 15:22  或许舞恋步  阅读(596)  评论(0)    收藏  举报