Setting cmptlevel to 80 on a SQL-Server 2005 inhibits the use of PIVOT and APPLY, but doesn't affect the use of Analytical Functions. Is there any rational behind this?
2 Answers
Some rationale I've observed, but this isn't exhaustive and is my guesswork
Compatibility Level isn't an all-or-nothing thing. It provides partial backwards compatibility while you fix issues.
A trival example with LOCK hints
FROM
Table (NOLOCK) -- not allowed with level 90+
and
FROM
Table WITH (NOLOCK) -- WITH is optional for level 80
Why this is now mandatory, I don't know. To do with CTEs?
For PIVOT and APPLY I suspect that a SQL statement using these is simply illegal SQL Server 2000 syntax whereas ROW_NUMBER is just an unknown function and "less" critical
An example using CROSS APPLY. For 80 this is illegal SQL Server 2000 syntax.
FROM
SomeTable S
CROSS APPLY --or JOIN
dbo.someTVF (S.column)
There are many questions on SO about errors because of lower levels in newer versions for you to review and hopefully get an understanding
-
-
1@samyi: kinda true, but see this msdn.microsoft.com/en-gb/library/ms143179(SQL.90).aspx Look for "WITH keyword when you are using table hints". And for SQL Server 2008: msdn.microsoft.com/en-gb/library/ms143729(SQL.100).aspx– gbnFeb 12, 2013 at 16:46
MSDN ALTER DATABASE Compatibility Level explains the behavior of the various levels. (just scroll down and you will find the comparison tables for the following topics )
you can find more specific comparison tables if you just change the Version from MSDN top menu (they are linked for top 3 versions in following list)
- 80 = SQL Server 2000
- 90 = SQL Server 2005
- 100 = SQL Server 2008 and R2
- 110 = SQL Server 2012
120 = SQL Server 2014
Differences Between Lower Compatibility Levels and Level 120
- sample line (The older query optimizer is used instead of new SQL Server 2014 engine which includes substantial improvements to the component that creates and optimized query plans )
- Differences Between Lower Compatibility Levels and Level 110