我們最近遇到了一個問題,即我們的開發團隊編寫的SQL包括SQL Server 2012/2014的新功能,並且SQL Server 2014在2008 compatibility中運行時允許使用該功能。SQL Server兼容性級別不起作用
當我開發服務器上運行該
EXEC SP_DBCMPTLEVEL '<insert db>'
GO
IF 1=1
THROW 51000, 'values match', 1;
GO
它返回
當前兼容級別爲100
消息51000,級別16,狀態1, 5個線
值匹配
在生產中,相同的SQL顯示了這一點:
當前兼容級別是100
消息102,級別15,狀態1, 線5附近
'扔' 不正確的語法。
我們還沒有升級我們的生產SQL Server,並且正在運行到部署問題。 THROW是SQL Server 2012新增的一個關鍵字,因此我預計2008服務器會突破語法。看起來兼容級別對我來說是打破了。
可以做些什麼來防止在開發環境中允許不兼容的SQL?
您誤解兼容性級別。您的代碼即使在兼容性級別爲90的數據庫中也能在SQL Server 2012上運行,但它不會在2012年下的SQL Server上執行 – sepupic
同樣的事情是,如果您嘗試在SQL Server 2008及更低版本上使用超前/滯後,您將獲得一個錯誤。但是你可以在2012年使用CL 100或甚至90的數據庫 – sepupic