2011-07-09 125 views
2

我新安裝的SQL Server 2008 R2與選擇選項安裝向後兼容性(添加刪除程序顯示向後兼容性安裝) 然後我運行我的SQL腳本來升級舊的數據庫,但它引發異常,如「該查詢使用非ANSI外部加入「(見圖像確切的錯誤)。 (SQL分析器說:SQLDMO_1拋出錯誤)。是否有任何區別SQL Server R2向後兼容性MSI VS下載SQL Server 2005向後兼容性MSI?

enter image description here

但是,當我安裝SQLServer的向後兼容性(SQLServer2005_BC.msi從網站下載)明確,做同樣的升級換代,它的成功合作。

我不知道爲什麼會發生?

我比較了兩個SQLDMO.DLL(Sql服務器安裝一個和SQL服務器一個),但兩者似乎都很好。 有沒有人得到同類問題或任何建議?

更新: 不,它不是與安裝向後兼容性相關的問題。最近發生了同樣的錯誤,我認爲這將通過安裝兼容bakward的msi來解決,但它並未解決。

所以仍然是原因懸而未決。

+0

當然真正的問題是,您不應該使用SQL Server 2000中甚至不使用的外部連接。Thay有時可能會被錯誤地解釋爲交叉連接。修復代碼 - 即使您使用兼容模式,也會導致不可靠的結果,這是不正確的代碼。 – HLGEM

+0

@HLGEM好吧,它確實是一個糟糕的代碼。但是代碼是在10年前編寫的,它不是100或200 LOC,1000是1000s。無論如何,我必須解決的是,但我現在無法做到。直到必須看到替代品,而且我專注於它爲什麼會發生?不在做什麼? – PawanS

回答

1

SQL Server 2008+不支持舊式ANSI 89連接,即*==*。在升級到SQL Server 2008或更高版本之前,這些將需要用左外連接和右外連接替換。任何包含這些代碼的代碼都不能在沒有引發錯誤的情況下編譯。

SQL Server 2005是支持舊式聯接的最高版本。

兼容模式80/90/100主要用於遺留數據庫使用新關鍵字的情況。這將導致語法錯誤,通過降低兼容性模式從解析器中刪除新功能/保留關鍵字,從而允許有時間從數據庫中刪除它們。

1

我不認爲你得到的錯誤與向後兼容性組件有關;這聽起來更像是一個問題,當你正在運行查詢的數據庫被設置爲80 vs 90或100的兼容模式時,如錯誤所暗示的,如果運行的查詢設置爲80,但不是90或100,則運行的查詢將起作用。如果你做了全新的sql安裝,所有的數據庫將被設置爲100;如果您進行了升級,則它們將保留在舊版本中,如果它是從SQL 2000升級的,則保留在80.

+0

雅這是真的....但這裏是問題是如果我安裝向後兼容性與SQL Server一起設置錯誤正在發生。但是,當向後兼容性明確安裝它不會發生。 – PawanS

+0

差距 - 這是有道理的,因爲當您安裝向後兼容性時,它允許升級後的數據庫以80模式運行。當你不選擇它時,SQL服務器默認使用100,這會導致你的錯誤。 –