2012-05-21 169 views
0

我正在將應用程序從SQL Server 2008遷移到SQL Server 2012 Express,並且一切正常,但有幾個存儲過程說我有語法錯誤。我在網上查找並沒有找到答案 - 是否有SQL Server 2008(Standard)支持的語法類型,但不支持SQL Server 2012 Express?從SQL Server 2008遷移到SQL Server 2012 Express

+7

沒有,我能想到的。也許你可以展示一個例子和ACTUAL錯誤消息。這裏有些聰明的人,但很少有讀者。 –

+1

對不起,我知道它是模糊的,但錯誤都在這個地方。一些語法,一些說一個對象不存在,等等。我以前沒有使用MS產品,但我認爲它可能是像從perl4到perl5,或從php4到php5,在某些事情中斷,並且存在轉換指導那裏。我不知道是這樣,我還沒有找到一個,但我懷疑這樣的事情可能是答案。我將添加一些實際的錯誤消息。謝謝。 – zortacon

回答

5

我想有一種可能性,如果在2008年你用2000兼容模式,你的存儲過程已經舊風格的外連接:

SELECT o.name, c.name 
FROM sys.objects AS o, sys.columns AS c 
WHERE o.[object_id] *= c.[object_id]; 

該語法同樣適用於SQL Server 2000中,但已自那時起棄用。如果您使用80兼容模式,在2005年,2008年和2008年R2,您可以穿上它。由於SQL Server 2012中,你可以不再使用80兼容模式,所以上面的代碼會失敗:

消息102,級別15,狀態1,行3
附近有語法錯誤 '* ='。

在2008年,你會得到這個錯誤信息,而不是:

消息4147,15級,狀態1,第3行
查詢使用非ANSI外部聯接 運營商("*=" or "=*")。要不加修改地運行此查詢,請使用 ALTER DATABASE的SET COMPATIBILITY_LEVEL選項將當前數據庫的兼容級別設置爲80。建議用 強制重寫使用ANSI外連接運算符的查詢(LEFT OUTER JOIN,RIGHT OUTER JOIN)。在未來版本的SQL Server中,即使在 向後兼容模式下,也不支持非ANSI連接運算符。

但是,如果你改變數據庫中的錯誤信息提示,它會工作:

ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80; 

這似乎是一個舒展。但是,如果沒有一些真實的信息,這是我唯一的猜測。

+0

「* ='」附近的語法錯誤是我得到的消息之一。之前它是一個版本2000兼容的數據庫。我從來沒有見過這種語法。轉換或學習需要轉換的內容的最佳方式是什麼? – zortacon

+1

@zortacon:錯誤消息說明了這一切:'強烈建議使用ANSI外連接運算符(LEFT OUTER JOIN,RIGHT OUTER JOIN)重寫查詢。「 –

3

以下是SQL Server 2012中不推薦使用的功能的list--特別看看T-SQL部分。您也可以使用SSDT(SQL Server數據工具),創建數據庫的脫機副本,然後將版本設置爲SQL Server 2012 - 輸出將顯示許多版本之間的語法不兼容性。我寫了一篇關於SSDT的博客,可能對您有所幫助here

相關問題