SQL Server与OracleSQL语法差异
以下差异将以SQL Server视角阐述
- 在创建函数或存储过程时,定义参数名前需要使用@符号
- 可以用ALTER PROCEDURE/FUNCTION来对已经存在的存储过程和函数的内容进行修改,Oracle的ALTER只可以用于重编译或debug。
- 要进行Top-N查询时,应该使用SELECT TOP N [column_name]
- 进行Top-N查询时,以Top 10为例,如果第11、12条数据与第10条相同,也想将其进行输出时,应使用SELECT TOP N WITH TIES语句
- 如果要查询前10%的数据,可以使用SELECT TOP N PERCENT
- 用户变量名使用@前缀进行定义,而Oracle中是使用:来作为前缀
- SQL Server中没有dual虚表的概念,如果需要进行某函数结果的测试,直接SELECT即可。
- Oracle捕获异常通常分为预定义和自定义异常,使用exception和when-then来进行捕获和异常信息抛出,而SQL Server中使用try-catch。
- 两个数据库函数大部分相同,小部分不同的按照具体情况百度
- SQL Server中的数据库类似于schema,要使用哪个数据库,就使用use xx语句,如果要显示多个查询结果,则每个语句后跟go
- 做聚合分析时,SQL Server中的是grouping,Oracle中是grouping set
- 如果需要同时显示查询结果和小计,但是由于字段数量不同,无法用union显示,此时可以使用compute(Oracle中没有)
- Oracle中的with xx as后跟查询语句,而SQL Server中的CTE应该写成with xx (输出字段) as后跟查询语句
- SQL Server中使用游标遍历获取数据时,应使用fetch next,而Oracle中的是fetch,而且SQL Server的游标可以前后滚动;关闭游标时Oracle只需要写Close cursor就会关闭并释放资源,而SQL Server还需要DEALLOCATE CURSOR来释放资源。
- SQL Server中遵循隐式事务提交,如果不在SSMS中修改implicit_transaction参数为off,那么每个语句将视为一个事务,在参数为on的情况下,如果需要将语句块视为事务,必须使用begin transaction..commit transaction来构造语句块。
- 存储过程/函数中,需要给参数赋默认值应使用等号,Oracle中是:=
- SQL Server和Oracle的数据类型略有不同,具体百度
- SQL Server自增字段使用identity定义,而Oracle需要使用序列实现
- SQL Server中使用SELECT INTO语句根据源表来创建新表,而Oracle中使用的是CTAS
- Oracle使用两个管道符号(||)来作为字串连接操作符,SQL Server则使用加号(+)
来自于同事整理和网上整理