因为工作原因,有幸了解到微软SQLSERVER版本差异,主要从SQL6.5至SQL2017版本的所遇到的差异语法。本人所了解到的,从SQL2008至SQL2017的语法上基本没有差异,至少目前所遇到的情况是从SQL2008升级至SQL2017的数据库不需要做语法的migration。所以差异对比是以SQL2008以下版本与SQL2008版本的对比。
首先先看一下各SQL版本的Compatibility level:
查看数据库的兼容级别与排序规则的SQL:
SELECT compatibility_level, collation_name FROM sys.databases WHERE name=@database
也可以在数据上右键查看属性→Options中查看Compatibility level,SQL2000及以下版本的没法查看属性。以下是SQL2008及SQL2017版本:
1.=null VS is null(经确认,SQL6.5至SQL2008返回结果是一致的)
SQL6.5 & SQL2000 版本下where 条件可以使用 where table.column=null或<>null进行筛选数据,但是在SQL2008(可能是从SQL2005开始,因为没有在SQL2005上尝试过,所以不太确定,下同,本文暂时忽略SQL2005版本)无论是=null或<>null条件都是不成立的,需要写成where table.column is null 或 is not null ;
2.(* =、=* ) VS (left join、right join)